sql转换脚本

时间:2016-06-06 11:59:37

标签: sql sql-server sql-server-2008 data-conversion

我有2个数据库,我想与一些类似的表合并。源表的id为bigint,目标表的int为ID。我的源表(< 20k)中没有很多记录,因此我想为所有记录分配新的ID,以便id可以放入int中。我怎么能用sql做这个?

2 个答案:

答案 0 :(得分:1)

第一个选项

您可以按如下方式使用Sequence对象:

首先创建一个Sequence对象并将其分配给目标表中的Max Id值加1开始。例如,如果目标表中的max Id为100,则需要将101指定为Start With。您还可以使用Max(Id)聚合函数从目标表中获取max Id值,并将其存储在变量中:

CREATE SEQUENCE SeqId
START WITH [Max value of Id in destination table]  
INCREMENT BY 1 ;  
GO  

然后使用以下查询插入目标表:

Insert Into tblXXX (Id, ...) Values (NEXT VALUE FOR SeqId, ...)

Read more about Sequence Object

第二个选项

您可以将目标表的Id列作为标识列,其种子等于目标表的Id列最大值,而Increment等于1。 Here is detailed exampleHere

答案 1 :(得分:1)

您没有提供太多详细信息,因此我只能提供一般指导原则:
注意:示例假定您要将表A和B合并到C中,并且您希望生成新ID。我还假设这些ID不被其他表(外键)引用。

首先从表A和B获得记录计数:

DECLARE @countA INT
DECLARE @countB INT
SET @countA = ( SELECT COUNT(*) FROM A )
SET @countB = ( SELECT COUNT(*) FROM B )

接下来,您使用窗口函数生成新ID并将记录插入表C。

INSERT INTO C
SELECT @countA + ROW_NUMBER() OVER( ORDER BY ID ) AS ID, ....
FROM A

INSERT INTO C
SELECT @countA + @countB + ROW_NUMBER() OVER( ORDER BY ID ) AS ID, ....
FROM B