身份从其他表 SSIS/SQL 的 maxid 开始
Posted
技术标签:
【中文标题】身份从其他表 SSIS/SQL 的 maxid 开始【英文标题】:identity start from maxid of other table SSIS/ SQL 【发布时间】:2020-12-10 15:34:13 【问题描述】:我在生产数据库中有一个 ID 为 int 标识 (1,1) 的表。 我正在尝试通过 SSIS 向它添加新数据,但 STG 中的表也具有相同的 int 标识 (1,1),它从 1 开始,我需要从 DB 生产中的表中的最大 id 开始。 然后我有一个在 id 上插入新数据的合并脚本 应该如何处理?
我尝试过: 我已尝试更改存储过程:
CREATE PROCEDURE spmaxid
as
BEGIN
SELECT max([ID])
FROM [Production].[dbo].[UNITS]
END
then this:
UPDATE [dbo].[STG UNITS] SET id = NULL
GO
DECLARE @id INT
SET @id = Spmaxid
UPDATE [STG].[dbo].[STG UNITS]
SET @id = id = @id + 1
GO
SELECT * FROM [STG UNITS]
GO
【问题讨论】:
所以你只想从你的新表开始标识,从其他表的最大 id 开始?您可以从原始表中更改(或删除)列,然后将其添加回 identity(@StartingIDFromPrevTable, 1) 这从您的蚂蚁号开始,第二个 , 1 是它为每个新行递增的方式.所以它会将 1 添加到 ID 的下一行。 看看这个:***.com/questions/46484008/… 您可以在插入生产表时忽略该列。由于它已经是一个标识列,它将从它离开的地方递增。DBCC CHECKIDENT ('your_table', RESEED, your_max_id);
。 docs.microsoft.com/en-us/sql/t-sql/database-console-commands/…(查看示例 C)。
Brad 我这样做了:首先删除列 ID,然后:alter table [STG].[dbo].[STG UNITS] add ID INT identity(1,1) DECLARE '@'MaxID INT SELECT '@'MaxID = max(ID) FROM [Production].dbo.UNITS DBCC CHECKIDENT([STG UNITS], RESEED, '@'MaxID) 我得到了检查身份信息:当前身份值'65060'。 DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。完成时间:2020-12-14T10:00:19.8493763+00:00 但在表中,我仍然看到 1 的身份,而不是生产表的 maxid 这里有什么问题
【参考方案1】:
我的解决方案是向 stg 添加一个名为 max_id 的新列,该列从生产 +1 中获取最大 id。然后我将这 2 个 db 合并为 1 个。
【讨论】:
以上是关于身份从其他表 SSIS/SQL 的 maxid 开始的主要内容,如果未能解决你的问题,请参考以下文章