有没有办法IDENTITY_INSERT ON
为表值类型设置?
TL;DR:不。
SET IDENTITY_INSERT
是针对表对象使用的命令,而不是变量。SET IDENTITY_INSERT (Transact-SQL):
SET IDENTITY_INSERT (Transact-SQL)
允许将显式值插入到表的标识列中。##句法
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
论据
database_name
是指定表所在的数据库的名称。
schema_name
是表所属的模式的名称。
table_name
是具有标识列的表的名称。
请注意,这根本没有引用变量;那是因为它不能用来对付一个人。
如果您确实需要两个版本的表类型,一个允许其 ID 列的显式值,另一个使用IDENTITY
,您将需要定义 2 个表类型;一个IDENTITY
有财产,另一个没有:
CREATE TYPE dbo.tvp_test_i AS TABLE (id INT NOT NULL IDENTITY(1, 1),
a INT NULL);
CREATE TYPE dbo.tvp_test_ni AS TABLE (id INT NOT NULL,
a INT NULL);
GO
DECLARE @i dbo.tvp_test_i;
INSERT INTO @i (a)
VALUES(17),(21);
DECLARE @ni dbo.tvp_test_ni;
INSERT INTO @ni (id,a)
VALUES(3,95),(5,34);
SELECT *
FROM @i;
SELECT *
FROM @ni;