在表变量的标识列中插入一行

时间:2016-10-25 14:27:12

标签: sql-server

我有以下表变量:

declare @TestTable2 as table (A int identity)

我试图插入一些值(例如1)而不改变上面的代码行

我一直试图做以下事情

declare @TestTable2 as table (A int identity)



SET IDENTITY_INSERT @TestTable2 ON
INSERT @TestTable2 (A)
VALUES (1)

但我收到错误(Incorret语法附近' @TableTEST2')

如何在A列中插入值?

3 个答案:

答案 0 :(得分:1)

不可以,SET IDENTITY_INSERT不适用于表变量

如果要使用SET IDENTITY_INSERT尝试创建临时表并在其上使用SET IDENTITY_INSERT

CREATE TABLE #TestTable2(A int identity)
SET IDENTITY_INSERT #TestTable2 ON

INSERT INTO #TestTable2 (A) VALUES (1)

有关详情,请点击General zephyr configuration screen

答案 1 :(得分:0)

检查下面的[MSDNlink] [1]它指定了限制。

EDIT。很明显你不想插入一个特定的值(那是Identity_Insert的用途)你想要的只是为columne A插入一个新的自动生成的值,那么你需要什么做是

 Insert @TestTable2 DEFAULT VALUES

https://connect.microsoft.com/SQLServer/feedback/details/757012/set-identity-insert-on-table-variables

答案 2 :(得分:0)

我能够通过将语句设置为变量然后使用连接的语句执行它们来完成任务。

BEGIN TRANSACTION;

    -- =============================================
    -- SET IDENTITY INSERT ON AND INSERT THE NEW RECORD.
    -- =============================================
    SET @STATEMENT1 = 'SET IDENTITY_INSERT ' + @TestTable2 + ' ON;';
    SET @STATEMENT2 = 'INSERT INTO ' + QUOTENAME(@TestTable2) + ' (A) VALUES (1);';
    SET @STATEMENT3 = 'SET IDENTITY_INSERT ' + @TestTable2 + ' OFF;';

    EXEC (@STATEMENT1 + @STATEMENT2 + @STATEMENT3);

COMMIT TRANSACTION;