расширенная команда обновления sql - PullRequest
1 голос
/ 02 сентября 2010

Допустим, у меня есть таблица с битовым столбцом с именем Active.По умолчанию столбец будет содержать значение false для каждой строки, кроме одной.Когда я выбираю использование gridview для обновления новой строки и изменения ее столбца «Active» с false на true ...

Как изменить следующую команду обновления, чтобы обновить все предыдущие строки на false, когдановая строка должна быть установлена ​​в true.(Я хочу, чтобы только одна строка была активна (true) за раз в этой таблице).

UpdateCommand="UPDATE [RbSpecials] 
                  SET [Name] = @Name, 
                      [Description] = @Description, 
                      [Active] = @Active 
                WHERE [ID] = @ID">

Ответы [ 3 ]

2 голосов
/ 02 сентября 2010
UPDATE [RbSpecials] 
SET 
    [Name] = @Name, 
    [Description] = @Description, 
    [Active] = @Active WHERE [ID] = @ID

UPDATE [RbSpecials] 
SET 
    [Active] = 0 WHERE [ID] != @ID

Вы можете создать хранимую процедуру, которая делает это, а затем просто передать @Name, @Description и @ID.

1 голос
/ 02 сентября 2010

Теоретически, вы можете сделать это так:

UPDATE [RbSpecials] SET 
    [Name] = case when [ID] = @ID then @Name else [Name] end,
    [Description] = case when [ID] = @ID then @Description else [Description] end,
    [Active] = case when [ID] = @ID then 1 else 0 end
FROM [RbSpecials]

Но это было бы более эффективно (я не описал, но это кажется интуитивно понятным) и определенно гораздо более читабельным, чтобы сделать это в двух утверждениях, согласно ответу Дастина Лейна.

1 голос
/ 02 сентября 2010
UPDATE [RbSpecials]
SET [Active] CASE WHEN [ID] = @ID THEN 1 ELSE 0 END

Извините за возможные ошибки, я давно не работал с сервером sql, но я надеюсь, что вы поймете идею

Также в случае оптимизации можно добавить это предложение WHERE

WHERE [ID] = @ID OR [Active] = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...