簡體   English   中英

僅當使用列列表且IDENTITY_INSERT為ON時,才能為表'Table'中的標識列指定一個顯式值。

[英]An explicit value for the identity column in table 'Table' can only be specified when a column list is used and IDENTITY_INSERT is ON

是否有人知道這個錯誤(僅當使用列列表且IDENTITY_INSERT為ON時,才能指定表“ HD_AANVRAAG_FASE”中的身份列的顯式值)。

說明:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤,以獲取有關錯誤及其在代碼中起源的更多信息。

異常詳細信息:System.Data.SqlClient.SqlException:僅在使用列列表且IDENTITY_INSERT為ON時,才能指定表'HD_AANVRAAG_FASE'中的Identity列的顯式值。 任何幫助表示贊賞。

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強制執行。

通常,您讓數據庫生成此代碼。 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中省略標識值,這也可以避免該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM