【问题标题】:SQL Server : error on insert into TempTableSQL Server:插入 TempTable 时出错
【发布时间】:2017-08-11 04:32:34
【问题描述】:

我创建了一个@TempTable,其中包含一个用于标识的附加列。

这里是查询:

declare @TempTable table
                   (
                       [EmpEnrollNumber] [nvarchar](MAX), 
                       [Date] [datetime],
                       rowuniq int identity(1,1)
                   );

SET IDENTITY_INSERT @TempTable ON;

INSERT INTO @TempTable 
    SELECT * 
    FROM [Tempdata]

SET IDENTITY_INSERT @TempTable OFF;

我收到以下错误:

消息 102,第 15 级,状态 1,第 2 行
“@TempTable”附近的语法不正确。

消息 102,第 15 级,状态 1,第 4 行
'@TempTable' 附近的语法不正确。

如何为@TempTable 启用身份插入?

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:

您不能在 Sql Server 中更改 table variable。所以不可能在表变量上SET IDENTITY_INSERT ON/OFF

尝试使用#temp table 代替表变量。

这是相关的连接项: SET IDENTITY INSERT on table variables

注意:设置Identity_insert ON时需要提及Insert中的列列表

【讨论】:

    【解决方案2】:

    无法更改表变量。但是,您可以声明一个临时表并执行此任务。检查下面的代码。

    CREATE TABLE #TEMPTABLE([EMPENROLLNUMBER] [NVARCHAR](MAX), [DATE] [DATETIME],ROWUNIQ INT IDENTITY(1,1));
    
    SET IDENTITY_INSERT #TEMPTABLE ON;
    INSERT INTO #TEMPTABLE SELECT * FROM [TEMPDATA]
    SET IDENTITY_INSERT #TEMPTABLE OFF;
    

    注意:当 IDENTITY_INSERT 为 ON 时,您的插入查询应该是这样的。

    INSERT INTO #TEMPTABLE([EMPENROLLNUMBER], [DATE], ROWUNIQ) VALUES(2, '2017-08-11', 4) 
    

    当它关闭时,您可以这样插入。

    INSERT INTO #TEMPTABLE VALUES(3, '2017-08-11') 
    

    希望现在已经很清楚了。

    【讨论】:

    • 在设置 Identity_insert ON 时需要在 Insert 中提及列列表
    • @Pரதீப் 它给了我错误:- 列名或提供的值的数量与表定义不匹配。
    • select 中我没有包含身份列。
    • @Pரதீப்:是的,我现在已将其添加到答案中。谢谢
    • @Anup - 你显然对SET IDENTITY_INSERT 的实际作用感到困惑。我建议你看看docs.microsoft.com/en-us/sql/t-sql/statements/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多