在 SQL Server 2005 中将列标识上的标识设置为另一个表的列

Posted

技术标签:

【中文标题】在 SQL Server 2005 中将列标识上的标识设置为另一个表的列【英文标题】:Set identity on the column identity to another table's column in 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 无法使用,因为它需要管理员权限。

【问题讨论】:

【参考方案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 ...

【讨论】:

以上是关于在 SQL Server 2005 中将列标识上的标识设置为另一个表的列的主要内容,如果未能解决你的问题,请参考以下文章

在同步 b/w 两个 sql server 2005 db 时解决标识列主键冲突

如何将标识属性添加到 SQL Server 中的现有列

当嵌入式键包含 SQL Server 上的标识列时,休眠插入失败

在 MS SQL 2005 或 2008 中自动递增多个标识列

如何在 SQL Server 2005 中将多行组合成以逗号分隔的列表?

sql2005中设置字段属性时,如何设标识列(自增1)和必须唯一