2012-02-21 102 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的值