【问题标题】:Set identity on the column identity to another table's column in SQL Server 2005在 SQL Server 2005 中将列标识上的标识设置为另一个表的列
【发布时间】:2013-12-14 23:54:05
【问题描述】:

我有一个表 TABLEAID 作为 IDENTITY 列。插入到表 TABLEA 中的最后一条记录带有(比如 1000 作为该标识列的值)。

我正在创建一个#temp 表,其中ID 作为identity 列。我需要为这个身份设置种子,以便从TABLEAID 上次输入的身份值(在本例中为 1001)继续。

我不想根据TABLEAmax(ID) 进行设置。请提出任何其他替代方案。

提前致谢。

注意:我使用的是 SQL Server 2005。

DBCC RESEED 无法使用,因为它需要管理员权限。

【问题讨论】:

    标签: sql sql-server sql-server-2005 identity-column


    【解决方案1】:

    为第一个插入创建一个临时表 SET IDENTITY INSERT ON 执行第一个 INSERT 然后 SET IDENTITY INSERT OFF 然后其他插入,您的种子将从那里开始这样的事情..

    CREATE TABLE #Temp (ID INT IDENTITY(1,1), Column1 CHAR(1));
    GO
    
    SET IDENTITY_INSERT #Temp ON;
    
    INSERT INTO #Temp (ID, Column1)
    VALUES (1000, 'A');
    
    SET IDENTITY_INSERT #Temp OFF;
    
    INSERT INTO #Temp ( Column1)
    VALUES ( 'B');
    
    SELECT * FROM #Temp
    

    结果集

    ID     Column1
    1000    A
    1001    B
    

    【讨论】:

      【解决方案2】:

      您可以使用ROW_NUMBER() 生成#Temp 表的值:

      INSERT INTO dbo.TableA ...
      
      DECLARE @LastID INT;
      SET @LastID = SCOPE_IDENTITTY();
      
      CREATE TABLE #Temp 
      (
          Col1 INT PRIMARY KEY, 
          Col2 VARCHAR(10)
      );
      INSERT #Temp ...
      SELECT @LastID + ROW_NUMBER() OVER(ORDER BY @@SPID), ...
      FROM ...
      

      【讨论】:

        猜你喜欢
        • 2010-09-18
        • 2013-04-17
        • 1970-01-01
        • 2011-05-27
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        相关资源
        最近更新 更多