【问题标题】:Get max value of column from database inside data flow从数据流中的数据库中获取列的最大值
【发布时间】:2018-08-07 09:34:32
【问题描述】:

我想创建一个 SSIS 包以将调查数据从 EXCEL 文件导入 SQL Server 表。表的第一列是RESPONSE_ID,每次插入新记录时都必须递增。所以,我想在每次插入之前获取变量中列的MAX(RESPONSE_ID),将此变量加一并将其用于下一条记录。请问,我该怎么做?

注意:将RESPONSE_ID 设为identity 是没有用的,因此它会自增。

谢谢

【问题讨论】:

  • 您可以在后端 SQL 表中创建一个 IDENTITY(1,1) 列 - 这是您的最佳选择。每次导入时,此列都会自动增加。
  • 问题是,当我删除一些数据时,ID不会被更新(减少)
  • 为什么要关心身份在删除时跳过数字?只要保留外键(这是重新播种的最大问题),你应该没问题。此外,如果这是原因,身份也不是一个很好的反击。

标签: sql-server ssis etl


【解决方案1】:

DBCC CHECKIDENT 管理命令用于重置身份计数器。命令语法为:

DBCC CHECKIDENT (table_name [, { NORESEED | { RESEED [, new_reseed_value ]}}])
[ WITH NO_INFOMSGS ]

例子:

DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
GO

【讨论】:

    【解决方案2】:

    好的,如果您要删除行。您可能需要重新设定 ID 列的种子。你这样做:

    DECLARE @Max INT;
    SET @Max = (SELECT MAX (identity_column_name) FROM table_name);
    DBCC CHECKIDENT('table_name', RESEED, @Max);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多