带主键与标识列的表变量插入报错(Msg 8101)求助
解决表变量标识列插入数据的Msg 8101错误
方法一:让标识列自动生成主键值
你的表变量中ProductID是IDENTITY(1,1)类型的标识列,会自动按规则递增生成值,无需从源表插入该列数据。修改插入语句即可解决:
DECLARE @Table4 TABLE ( ProductID INT PRIMARY KEY IDENTITY (1,1), DocumentNode VARCHAR(50), ModifiedDate DATE ) -- 指定插入的非标识列,让标识列自动生成值 INSERT INTO @Table4 (DocumentNode, ModifiedDate) SELECT DocumentNode, ModifiedDate FROM [Production].[ProductDocument] SELECT * FROM @Table4
方法二:保留源表的ProductID值(开启IDENTITY_INSERT)
如果需要将源表的ProductID值直接插入到表变量的标识列中,必须开启IDENTITY_INSERT,同时明确指定插入的列列表:
DECLARE @Table4 TABLE ( ProductID INT PRIMARY KEY IDENTITY (1,1), DocumentNode VARCHAR(50), ModifiedDate DATE ) -- 开启标识列显式插入权限 SET IDENTITY_INSERT @Table4 ON; -- 必须指定完整列列表,才能给标识列赋值 INSERT INTO @Table4 (ProductID, DocumentNode, ModifiedDate) SELECT ProductID, DocumentNode, ModifiedDate FROM [Production].[ProductDocument] -- 关闭权限,避免影响后续操作 SET IDENTITY_INSERT @Table4 OFF; SELECT * FROM @Table4
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

