只有在使用列列表并且IDENTITY_INSERT为ON时,才能指定表’Table’中标识列的显式值

有人知道这个错误(表’HD_AANVRAAG_FASE’中的标识列的显式值只能在使用列列表且IDENTITY_INSERT为ON时指定。

描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.Data.SqlClient.SqlException:只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表’HD_AANVRAAG_FASE’中标识列的显式值。)表示? 任何帮助表示赞赏。

private void Insert2() { SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString()); conn.Open(); SqlCommand dCmd2 = new SqlCommand( "INSERT INTO HD_AANVRAAG_FASE VALUES (@fase_id, @aanvraag_id, @status_id, " + "@werknemer_id, @fase_datum) SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF ", conn); dCmd2.Parameters.AddWithValue("@fase_id", 1); dCmd2.Parameters.AddWithValue("@aanvraag_id", 2622); dCmd2.Parameters.AddWithValue("@status_id", 15); dCmd2.Parameters.AddWithValue("@werknemer_id", 165); dCmd2.Parameters.AddWithValue("@fase_datum", "12-12-2001"); dCmd2.ExecuteNonQuery(); conn.Close(); } 

由于您没有明确指定列,我假设@fase_id被传递到IDENTITY列,该错误表示除非您通过IDENTITY_INSERT强制执行,否则您无法执行此操作。

通常,你让DB生成这个; 指定INSERT的列并省略标识列(并且不要尝试分配值)。 INSERT之后的直接新ID可用作SCOPE_IDENTITY()

您的代码包含

SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF

但不是相应的

在开始时SET IDENTITY_INSERT HD_AANVRAAG_FASE ON

为什么你明确插入这些? 这是同步任务吗?

你错过了一个

 SET IDENTITY_INSERT HD_AANVRAAG_FASE ON 

在运行插入之前。 这是错误的确切原因。

也就是说,显式插入标识值很少 – 例如,仅在将数据从一个表复制到另一个表或使用显式ID初始化新表时使用。 通常,您只想省略INSERT中的标识值,这也可以避免错误。