首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql转换脚本

sql转换脚本
EN

Stack Overflow用户
提问于 2016-06-06 11:59:37
回答 2查看 67关注 0票数 0

我有两个数据库,我想与一些相似的表合并。源表以ID作为bigint,我的目标表以int作为id。我的源表中没有那么多记录(< 20k),所以我希望将新ID分配给所有记录,这样ID就可以容纳一个int。我如何使用sql来做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-06 12:12:00

你没有提供太多的细节,所以我只能提供一个一般的指导方针:

注意:示例假设您希望将表A和表B合并到C中,并且希望生成新的ID。我还假设其他表(外键)没有引用这些I。

首先,您可以从表A和表B获得记录计数:

代码语言:javascript
复制
DECLARE @countA INT
DECLARE @countB INT
SET @countA = ( SELECT COUNT(*) FROM A )
SET @countB = ( SELECT COUNT(*) FROM B )

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

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2016-06-06 12:10:09

First Option

您可以使用Sequence对象如下:

首先创建一个序列对象,并将它的开始值赋值给目标表中的最大Id值加上1。例如,如果目标表中的最大Id为100,则需要分配101作为开始。还可以使用Max( Id )聚合函数从目标表中获取最大Id值,并将其存储在变量中:

代码语言:javascript
复制
CREATE SEQUENCE SeqId
START WITH [Max value of Id in destination table]  
INCREMENT BY 1 ;  
GO  

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

代码语言:javascript
复制
Insert Into tblXXX (Id, ...) Values (NEXT VALUE FOR SeqId, ...)

阅读更多关于序列对象的信息

第二选择

可以将目标表的Id列设置为标识列,其种子等于目标表的Id列最大值和增量等于1。下面是详细的示例也是这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37656879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档