假设我的表有一个名为Active
的列。默认情况下,除了一行之外,该列的值将包含false。当我选择使用gridview更新新行并使其“Active”列从false更改为true时...
如果要将新行设置为true,我如何修改以下更新命令以将所有先前的行更新为false。 (我只希望在此表中一次将一行设置为活动(true))。
UpdateCommand="UPDATE [RbSpecials]
SET [Name] = @Name,
[Description] = @Description,
[Active] = @Active
WHERE [ID] = @ID">
答案 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]
但是,根据达斯汀·莱恩的回答,它会更有效率(我没有描述,但看起来很直观),并且在两个陈述中更容易阅读。