sql 用IF判断参数传值问题

花猪 2011-11-09 04:15:29
比如下面这段代码,TABLE表里面有 XXX(INT),test nvarchar 这样的2个字段
定义参数@A 从table查处XXX的值
要求把 XXX 是 5 的行里面的test 的值更新成'YES'
否则 更新成'no'

问题是:我这段代码有毛病,UPDATE 的时候 @A只传一个值进来执行更新...
其实原始table表里面查出来的@A是多个值

请教各位大侠,该如修改,让我达到按照判断更新需要的结果,也就是把@A的多个查出来的值都执行



DECLARE @A INT
SELECT @A=XXX FROM mid_inv_dict
if(@A=5)
BEGIN
UPDATE table SET test='YES' WHERE XXX = @A
END
ELSE
BEGIN
UPDATE table SET test='NO' WHERE XXX = @A
END
...全文
551 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
花猪 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fredrickhu 的回复:]

逐个判断用游标吧。
[/Quote]

请教,游标具体怎么实现这个效果的,感觉游标对系统的操作很大压力吧....
--小F-- 2011-11-09
  • 打赏
  • 举报
回复
逐个判断用游标吧。
花猪 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 beirut 的回复:]

同一个表,你写的是毛毛啊。。。。。

SELECT @A=XXX FROM table

这里给变量赋值的时候 如果有多个值的时候 @a 会得到最后一个值。

不能同时得到多个值
sql 2012 据说引进了数组变量,那就能解决你的疑惑了
[/Quote]

对对 我就是想对查出来的参数@A进行逐个值判断呢...
有没渐变的办法啊,大哥,你就教教我吧,我新手,没有多少分,真不好意思
黄_瓜 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 l5465 的回复:]

引用 2 楼 xuam 的回复:

用动态语句


对不起啊,我刚才一时着急打错了,其实是同一个表,只有table这一张表

DECLARE @A INT
SELECT @A=XXX FROM table
if(@A=5)
BEGIN
UPDATE table SET test='YES' WHERE XXX = @A
END
ELSE
BEGIN
UPDATE……
[/Quote]
神马程序的if 也只判断一次吧
花猪 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuam 的回复:]

用动态语句
[/Quote]

对不起啊,我刚才一时着急打错了,其实是同一个表,只有table这一张表

DECLARE @A INT
SELECT @A=XXX FROM table
if(@A=5)
BEGIN
UPDATE table SET test='YES' WHERE XXX = @A
END
ELSE
BEGIN
UPDATE table SET test='NO' WHERE XXX = @A
END



其实我知道可以用2个UPDATE 配合WHERE条件更新
我是想请教
如果用定义变量的方式,如何把变量的值进行完整的判断,而不是一次只判断一个值就停止了
黄_瓜 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 l5465 的回复:]

引用 3 楼 beirut 的回复:

SQL code
--try
UPDATE t SET t.test=case when m.XXX= 5 then 'YES' else 'NO' end
from table t, mid_inv_dict m
WHERE t.XXX =m.XXX


其实我知道可以用2个UPDATE 配合WHERE条件更新
我是想请教
……
[/Quote]
你说的是逐个判断吧
得写个循环 或者游标
黄_瓜 2011-11-09
  • 打赏
  • 举报
回复
同一个表,你写的是毛毛啊。。。。。

SELECT @A=XXX FROM table

这里给变量赋值的时候 如果有多个值的时候 @a 会得到最后一个值。

不能同时得到多个值
sql 2012 据说引进了数组变量,那就能解决你的疑惑了
花猪 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 beirut 的回复:]

SQL code
--try
UPDATE t SET t.test=case when m.XXX= 5 then 'YES' else 'NO' end
from table t, mid_inv_dict m
WHERE t.XXX =m.XXX
[/Quote]

其实我知道可以用2个UPDATE 配合WHERE条件更新
我是想请教
如果用定义变量的方式,如何把变量的值进行完整的判断,而不是一次只判断一个值就停止了
花猪 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 beirut 的回复:]

SQL code
--try
UPDATE t SET t.test=case when m.XXX= 5 then 'YES' else 'NO' end
from table t, mid_inv_dict m
WHERE t.XXX =m.XXX
[/Quote]

对不起啊,我刚才一时着急打错了,其实是同一个表,只有table这一张表

DECLARE @A INT
SELECT @A=XXX FROM table
if(@A=5)
BEGIN
UPDATE table SET test='YES' WHERE XXX = @A
END
ELSE
BEGIN
UPDATE table SET test='NO' WHERE XXX = @A
END
黄_瓜 2011-11-09
  • 打赏
  • 举报
回复
--try
UPDATE t SET t.test=case when m.XXX= 5 then 'YES' else 'NO' end
from table t, mid_inv_dict m
WHERE t.XXX =m.XXX
xuam 2011-11-09
  • 打赏
  • 举报
回复
用动态语句
花猪 2011-11-09
  • 打赏
  • 举报
回复
求教各位大侠,万分感激,如果给我解释下,更好,再次谢谢了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧