我想创建一个SQL语句,它将复制给定的记录并返回插入的ID,例如:
INSERT INTO DF_FILES
OUTPUT INSERTED.TableID
SELECT *
FROM DF_FILES
WHERE DOC = "myFile.txt"
然后我尝试使用以下内容捕获ID:
Int32 t_ID = (Int32)command.ExecuteScalar();
当我通过C#SqlCommand
运行语句时,收到以下错误消息。
只有在使用列列表并且IDENTITY_INSERT为ON时,才能指定表'DF_FILES'中标识列的显式值。
是否有解决方法来获取新创建的记录的ID?
谢谢, 达林
答案 0 :(得分:3)
“INSERT INTO without column names”仅在您为表中的所有列插入值并且顺序完全相同时才有效。
在这种情况下,由于TableID似乎已将IDENTITY_INSERT设置为ON,这意味着根据身份的状态为每行计算列的值,因此您不能只是在其中插入新值。如果在没有TableID的情况下列出DF_FILES表中的所有列并尝试插入,则可以解决此问题。
INSERT INTO DF_FILES (col1, col2 , col3 ...)
OUTPUT INSERTED.TableID
SELECT col1, col2 , col3 ...
FROM DF_FILES
WHERE DOC = "myFile.txt"