在 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 【问题描述】:我有一个表 TABLEA
和 ID
作为 IDENTITY
列。插入到表 TABLEA
中的最后一条记录带有(比如 1000 作为该标识列的值)。
我正在创建一个#temp
表,其中ID
作为identity
列。我需要为这个身份设置种子,以便从TABLEA
的ID
上次输入的身份值(在本例中为 1001)继续。
我不想根据TABLEA
的max(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 上的标识列时,休眠插入失败
在 MS SQL 2005 或 2008 中自动递增多个标识列