【问题标题】:sql conversion scriptsql转换脚本
【发布时间】:2016-06-06 11:59:37
【问题描述】:

我有 2 个数据库,我想与一些类似的表合并。源表的 id 为 bigint,我的目标表的 ID 为 int。我的源表中没有那么多记录(

【问题讨论】:

  • 如果您的表之间存在与 id 混淆的关系,您知道在哪里可能会很痛苦。如果是这种情况,您可能只想保留 bigint,而不是为现有数据分配新的 id 值。

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


【解决方案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

【讨论】:

    【解决方案2】:

    第一个选项

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

    首先创建一个Sequence对象,并将它的Start With值分配给目标表中的max Id值加1。例如,如果目标表中的max Id为100,则需要将101分配为Start With。您还可以使用 Max(Id) 聚合函数从目标表中获取最大 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 列设置为 Identity 列,种子等于目标表的 Id 列最大值,增量等于 1。 Here is detailed example 还有Here

    【讨论】:

    • @Alex 哎呀。你说的对。我也添加了另一个选项
    猜你喜欢
    • 2020-08-09
    • 2018-09-28
    • 2012-02-14
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多