比如下面这段代码,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

解决方案 »

  1.   

    --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.   


    对不起啊,我刚才一时着急打错了,其实是同一个表,只有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
      

  3.   


    其实我知道可以用2个UPDATE 配合WHERE条件更新  
    我是想请教  
    如果用定义变量的方式,如何把变量的值进行完整的判断,而不是一次只判断一个值就停止了
      

  4.   

    同一个表,你写的是毛毛啊。。SELECT @A=XXX FROM table这里给变量赋值的时候 如果有多个值的时候 @a 会得到最后一个值。不能同时得到多个值
     sql 2012 据说引进了数组变量,那就能解决你的疑惑了
      

  5.   


    对不起啊,我刚才一时着急打错了,其实是同一个表,只有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条件更新   
    我是想请教   
    如果用定义变量的方式,如何把变量的值进行完整的判断,而不是一次只判断一个值就停止了