使用OUTPUT INSERTED

时间:2015-08-04 23:13:38

标签: c# sql-server-2012

我想创建一个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?

谢谢, 达林

1 个答案:

答案 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"