2010-07-25 72 views
3

我想更新記錄,如果表中有一行。更新記錄後,我想從我的方法返回TRUE。我正在使用以下查詢。我正在使用SQL Server 2005.如何知道我的SQL查詢是否更新了表?請告訴我。更新如果存在查詢

Private Boolean UpdateTable() 
{ 
    string sql = "IF EXISTS(Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]) BEGIN ..... END" 

} 

謝謝。

+0

如果使用關鍵字SET NOCOUNT ON,返回通過RowsAffected = obj.ExecuteNonQuery()影響的行可能會導致-1值。堅持通過OUTPUT參數或SELECT RowsAffected = @@ ROWCOUNT記錄集來返回計數可能會更好 - 以防萬一您使用SET NOCOUNT ON。 如果您要檢索以下RowsUpdated版本,請不要使用SET NOCOUNT ON關鍵字,但恕我直言,我總是打開SET NOCOUNT ON;因爲在我的標準和最佳實踐書中,我一直都在使用它,所以它的價格非常昂貴。這就是爲什麼我想警告你。 – SnapJag 2010-07-29 22:49:47

回答

4

每當執行批處理SQL,你應該被通知有多少行進行了修改/插入/更新,無論是從您例如返回值SqlCommand.ExecuteNonQuery()電話:

Private Boolean UpdateTable() 
{ 
    int rowsUpdated = 0; 

    string sql = "IF EXISTS(Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]) BEGIN ..... END" 

    using(SqlConnection con = new SqlConnection("your-connection-string-here")) 
    { 
     using(SqlCommand cmd = new SqlCommand(sql, con)) 
     { 
      con.Open(); 
      rowsUpdated = cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
    } 

    return (rowsUpdated > 0); 
} 

,或者你可以在UPDATE後查詢您的SQL語句@@ROWCOUNT屬性:

... 
BEGIN 
    UPDATE ........ 

    DECLARE @Updated INT 
    SELECT @Updated = @@ROWCOUNT 
END 

您可以返回值,或檢查的大於零或任何你的值想做。

+0

謝謝。它看起來像我的SQL查詢有問題。我怎樣才能寫JOIN條件的更新語句? UPDATE TABLEA SET CNUM = @cnum FROM TABLEA A,TABLEB B WHERE A.CID = B.CID AND A.CNUM爲NULL且CID = @ cID – nav100 2010-07-25 21:13:22

+0

謝謝。現在正在工作。這是我的查詢。我不知道這是對的。 如果存在(選擇A.CNUM FROM TABLEA A,TABLE B B WHERE A.CID = B.CID AND A.CNUM爲NULL且CID = @ cID) BEGIN DECLARE @Updated INT UPDATE TABLEA SET CNUM ='test' FROM TABLEA A,TABLEB B WHERE A.CID = B.CID AND A.CNUM爲NULL且CID = @ cID SELECT @Updated = @@ ROWCOUNT END – nav100 2010-07-25 21:22:04

+0

@ nav100:在評論中放入大型代碼片段並不是一件好事 - 他們不能被格式化看起來不錯。你爲什麼不用你的最終解決方案更新你的原始問題(通過編輯)?這對我們所有人更有用!謝謝。 – 2010-07-26 05:03:12