2016-11-25 61 views
1

我如何使用SET IDENTITY_INSERT dbo.TableName ONSET IDENTITY_INSERT如何工作?

這裏是我的錯誤代碼:

當使用列列表只能指定表「tbl_PurchaseRequest」的標識列一個明確的價值和IDENTITY_INSERT爲ON。

我在SQL Server 2014中運行此查詢,它說Command successful但仍然在C#中工作。

我的代碼:

DBPurCon dbcon = new DBPurCon(); 

    public void Purchase1 (BELPurchase BELPur) 
    { 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = dbcon.getcon(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "SET IDENTITY_INSERT dbo.tbl_PurchaseRequest ON"; 
     cmd.ExecuteNonQuery(); 

     SqlCommand cmd1 = new SqlCommand(); 
     cmd1.Connection = dbcon.getcon(); 
     cmd1.CommandType = CommandType.Text; 
     cmd1.CommandText = "INSERT INTO tbl_PurchaseRequest VALUES (@SID1,@Vendor,@Address,@Date,@Terms,@Qty1,@ITD1,@Unit,@UP1,@TP1,@ATT,@REQBY);"; 
     cmd1.Parameters.AddWithValue("@SID1", BELPur.SID1); 
     cmd1.Parameters.AddWithValue("@Vendor", BELPur.Vendor); 
     cmd1.Parameters.AddWithValue("@Address", BELPur.Address); 
     cmd1.Parameters.AddWithValue("@Date", BELPur.Date); 
     cmd1.Parameters.AddWithValue("@Terms", BELPur.Terms); 
     cmd1.Parameters.AddWithValue("@Qty1", BELPur.Qty1); 
     cmd1.Parameters.AddWithValue("@ITD1", BELPur.ItD1); 
     cmd1.Parameters.AddWithValue("@Unit", BELPur.Unt1); 
     cmd1.Parameters.AddWithValue("@UP1", BELPur.UP1); 
     cmd1.Parameters.AddWithValue("@TP1", BELPur.TP1); 
     cmd1.Parameters.AddWithValue("@ATT", BELPur.AllTot); 
     cmd1.Parameters.AddWithValue("@REQBY", BELPur.ReqBy); 
     cmd1.ExecuteNonQuery(); 
    } 

    public void Request1 (BELPurchase BELPur) 
    { 
     SqlCommand cmd2 = new SqlCommand(); 
     cmd2.Connection = dbcon.getcon(); 
     cmd2.CommandType = CommandType.Text; 
     cmd2.CommandText = "INSERT INTO tbl_RequestPreview VALUES (@ReqTit,@ReqBy,@Terms,@Unlock,@AllTot,'Request')"; 
     cmd2.Parameters.AddWithValue("@ReqTit", BELPur.ReqTit); 
     cmd2.Parameters.AddWithValue("@ReqBy", BELPur.ReqBy); 
     cmd2.Parameters.AddWithValue("@Terms", BELPur.Terms); 
     cmd2.Parameters.AddWithValue("@Unlock", BELPur.Unlock); 
     cmd2.Parameters.AddWithValue("@AllTot", BELPur.AllTot); 
     cmd2.ExecuteNonQuery(); 
    } 
} 

如果我寫在這裏的代碼,它始終運行SET IDENTITY_INSERT查詢時,我點擊Purchase按鈕。它只能運行一次還是多次?

+0

你實際上是試圖插入「身份」列?如果是這樣,爲什麼?如果你不是 - 問題是你沒有在'insert'語句中指定一個列列表。它應該是'INSERT INTO tbl_RequestPreview(ColumnName1,ColumnName2等)值(@ Value1,@ Value2,@etc)'。 – Blorgbeard

+0

布格爵士!我想在'tbl_PurchaseRequest'中運行'SET IDENTITY_INSERT'查詢 –

+0

爲什麼你想這麼做?因爲錯誤說要這樣做?你明白它的作用嗎?你知道「身份」專欄是什麼嗎? – Blorgbeard

回答

0

您不應單獨執行這些命令。您需要包含標識列名稱及其值。

我們通常需要IDENTITY_INSERT當我們想要插入標識字段來插入SQL命令的值而不是Auto,所以請包括request_id及其值。

cmd1.CommandText = "SET IDENTITY_INSERT [dbo].[tbl_PurchaseRequest] ON; 
     INSERT INTO tbl_PurchaseRequest VALUES (@ReqID,@SID1,@Vendor,@Address,@Date,@Terms,@Qty1,@ITD1,@Unit,@UP1,@TP1,@ATT,@REQBY); 
        SET IDENTITY_INSERT [dbo].[tbl_PurchaseRequest] OFF;"; 

cmd1.Parameters.AddWithValue("@ReqID", SomeNumber++); 

是它只能運行一次或多次

是的,你可以在我們的命令後設置OFF多次運行它

+0

所以先生! @ mohit-shrivastava你的意思是我每次點擊'Purchase'按鈕時,它總是執行查詢ON和OFF? –

+0

是的!先生@AnjelloJoshua你說得對。 –

+0

OKAY SIR!@ mohit-shrivastava謝謝!!!我吱吱:'( –

相關問題