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 时出错的主要内容,如果未能解决你的问题,请参考以下文章