2012-02-21 72 views
-1

我要一些數據的兩個數據庫之間的複製,所以我用一個INSERT查詢類似如下:在插入查詢使用Select查詢語句插入序列號

INSERT INTO [NewDB].[MyTable] 
(
[FirstName], 
[LastName], 
[Number] 
) 
(
SELECT [ST].[FirstName], [ST].[LastName], **SequentialNumber** 
FROM [SourceDB].[SourceTable] AS [ST] 
); 
GO 

但新表有一個新的獨特的INT不如你看到的那樣,列名爲Number的空列,那麼如何使用下面的腳本插入連續數字(實際上是10位數字),有些東西如1234567891,1234567892,...,有沒有人有任何想法?

+0

因此'Number'已經是一個標識列?你想在插入的時候插入它,還是要強制它接受你在SELECT中提供的新的順序值? – 2012-02-21 12:02:13

+0

@Alex K.'Number'不是身份標識,我有一些理由不這樣做,我只是想爲Source Db的數據創建一個Sequential數字,而在New Data中'Number'有一個特殊格式插入應用程序 – Saeid 2012-02-21 12:08:08

回答

2

可以使用ROW_NUMBER()功能,如:

INSERT INTO [NewDB].[MyTable] 
(
    [FirstName], 
    [LastName], 
    [Number] 
) 

SELECT [ST].[FirstName], [ST].[LastName], ROW_NUMBER() OVER(ORDER BY [ST].[FirstName]) 
FROM [SourceDB].[SourceTable] AS [ST] 
+0

其實我想要一個10位數字:如1234567890和1234567891,你有什麼想法嗎? – Saeid 2012-02-21 12:09:37

+1

@Saeid,然後簡單地:'10000000000 + ROW_NUMBER()OVER(ORDER BY [ST]。[FirstName])':) – 2012-02-21 12:11:16

0

也許是這樣的:如果

INSERT INTO [MyTable] 
(
[FirstName], 
[LastName], 
[Number] 
) 

SELECT [ST].[FirstName], [ST].[LastName], (select max(number)+1 from [MyTable]) 
FROM [SourceTable] AS [ST] 

你沒有:

;WITH CTE AS 
(
    SELECT 
     [ST].[FirstName], 
     [ST].[LastName], 
     ROW_NUMBER() OVER(ORDER BY [ST].[FirstName]) AS rowNbr 
    FROM 
     [SourceDB].[SourceTable] AS [ST] 
) 
INSERT INTO [NewDB].[MyTable] 
(
    [FirstName], 
    [LastName], 
    [Number] 
) 
SELECT 
    CTE.[FirstName], 
    CTE.[LastName] 
    1234567890+(CTE.rowNbr-1) 
FROM 
    CTE 
0

你可以這樣做在MyTable上的記錄你將需要一個case來處理NULL的值