SQL Server:插入 TempTable 时出错

Posted

技术标签:

【中文标题】SQL Server:插入 TempTable 时出错【英文标题】:SQL Server : error on insert into 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 启用身份插入?

【问题讨论】:

***.com/questions/45627512/… 【参考方案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/…

以上是关于SQL Server:插入 TempTable 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中删除全局临时表 (##tempTable)

从其他临时表插入 SQL Server 临时表 [关闭]

如何在 temptable 中捕获 DBCC 语句的输出

请教:sql server中如何设置新添加的列为第一列

SQL Server 内联查询是不是在后台创建临时表

sql SQL.TempTable