高级sql更新命令

时间:2010-09-02 00:05:09

标签: sql tsql

假设我的表有一个名为Active的列。默认情况下,除了一行之外,该列的值将包含false。当我选择使用gridview更新新行并使其“Active”列从false更改为true时...

如果要将新行设置为true,我如何修改以下更新命令以将所有先前的行更新为false。 (我只希望在此表中一次将一行设置为活动(true))。

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

3 个答案:

答案 0 :(得分:2)

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

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

您可以创建执行此操作的存储过程,然后只传递@Name@Description@ID

答案 1 :(得分:1)

UPDATE [RbSpecials]
SET [Active] CASE WHEN [ID] = @ID THEN 1 ELSE 0 END

很抱歉可能出现错误,很久以前我没有使用sql server,但我希望你能理解

同样在优化的情况下,可以添加WHERE子句

WHERE [ID] = @ID OR [Active] = 1

答案 2 :(得分:1)

理论上,你可以这样做:

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]

但是,根据达斯汀·莱恩的回答,它会更有效率(我没有描述,但看起来很直观),并且在两个陈述中更容易阅读。