2010-07-25 9 views
3

Я пытаюсь ОБНОВИТЬ запись, если в таблице есть строка. После обновления записи я хотел бы вернуть TRUE из моего метода. Я использую следующий запрос. Я использую SQL Server 2005. Как узнать, обновил ли мой SQL-запрос таблицу? Пожалуйста, дайте мне знать.UPDATE IF EXISTS Query

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

Возврат строк, затронутых с помощью RowsAffected = obj.ExecuteNonQuery() может привести к значению -1 при использовании ключевых слов SET NOCOUNT ON. Лучше было бы возвращать счет через параметр OUTPUT или набор записей SELECT RowsAffected = @@ ROWCOUNT - на всякий случай, если вы используете SET NOCOUNT ON. Если вы хотите получить версии RowsUpdated ниже, не используйте ключевые слова SET NOCOUNT ON, но IMHO Я всегда включаю SET NOCOUNT ON; потому что хит настолько дорогой, в моей книге «Стандарты и передовая практика» я использую его все время. Вот почему я хотел вас предупредить. – SnapJag

ответ

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); 
} 

или вы можете запросить @@ROWCOUNT свойство в вашем SQL заявление после UPDATE:

... 
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 AND CID = @ cID – nav100

+0

Спасибо. Теперь работает. Вот мой запрос. Я не знаю, что это правильный путь. IF EXISTS (Выберите A.CNum FROM TABLEA A, TABLEB B WHERE A.CID = B.CID AND A.CNum - NULL AND 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 AND CID = @ cID SELECT @Updated = @@ ROWCOUNT END – nav100

+0

@ nav100: размещение больших фрагментов кода в комментариях не очень хорошо - они не могут быть отформатированы, чтобы хорошо выглядеть. Почему бы вам просто не обновить свой первоначальный вопрос (отредактировав его) своим окончательным решением? Это было бы более полезно для всех нас! Благодарю. –

Смежные вопросы