身份从其他表 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 开始的主要内容,如果未能解决你的问题,请参考以下文章

SSIS - SQL Server datetimeoffset目标列,标识为DT_WSTR

如何在 SSIS 中将 Y2K 日期转换为 SQL 日期?

Openstack之二:服务认证keystone

thinkphp如何获取数据表主键id的最大值?

SSAS 2012 使用维度值过滤其他维度表

如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?