sql server update + output返回空值

时间:2014-11-28 12:31:53

标签: sql-server output

每个人..我是新手,我正在尝试制作我的第一个“更复杂的查询”,但是没有完全发挥作用:这里是:

if NOT EXISTS (Select id,selector  from Messages where MID='SYCKY')
    Insert into Messages (MID,selector) Values ('SYCKY', 'SaraB|') 
    ELSE 
        if exists (
                     select '1' 
                     from Messages 
                     where charindex ('SaraB|',selector)>0
                  )  
            Update Messages 
            set selector = replace(selector,'SaraB|','') output inserted.selector 
            where MID='SYCKY' 
        ELSE
            Update Messages 
            set selector = selector+'SaraB|' output inserted.selector 
            where MID='SYCKY'

它执行所需的操作,但在输出中我只有一个空字段

还试图添加一个额外的字段,如下所示:

if NOT EXISTS (Select id,selector  from Messages where MID='SYCKY')  
    Insert into Messages (MID,selector) Values ('SYCKY', 'SaraB|') 
ELSE 
    if exists (select '1' from Messages where charindex ('SaraB|',selector)>0)  
        Update Messages 
        set selector = replace(selector,'SaraB|',''), T='1' output inserted.T  
        where MID='SYCKY' 
    ELSE
        Update Messages 
        set selector = selector+'SaraB|', T='0' output inserted.T 
        where MID='SYCKY'

但结果是一样的:T是空的,而我需要知道“SaraB |”已在字段中添加或删除

怎么了?

1 个答案:

答案 0 :(得分:0)

不太确定......但也许这就是你想要的?

if NOT EXISTS (Select id,selector  from Messages where MID='SYCKY')
    Insert into Messages (MID,selector) Values ('SYCKY', 'SaraB|') 
    ELSE 
        if exists (
                     select '1' 
                     from Messages 
                     where charindex ('SaraB|',selector)>0
                  )  
          BEGIN
            Update Messages 
            set selector = replace(selector,'SaraB|','') output inserted.selector 
            where MID='SYCKY';
            SELECT 'If was true';
          END
        ELSE
          BEGIN
            Update Messages 
            set selector = selector+'SaraB|' output inserted.selector 
            where MID='SYCKY';
            SELECT 'If was false';
          END

这将"返回"不同的值取决于if的评估方式。