NULLS的T-SQL连接问题

时间:2017-02-27 21:38:35

标签: sql sql-server tsql

我试图做一个简单的连接但在某个地方失败了!我想仅在其他两个变量不为空时才在电子邮件中显示注释。即使一个变量包含数据,它也应该显示Note。以下是我的代码。

SET @Note = CASE 
               WHEN @tableHTML_AssignedTo IS NOT NULL OR @tableHTML_SubmittedBy IS NOT NULL
                  THEN 'Note: The tickets with the following statuses are not listed in this alert: Closed,Rejected' 
                  ELSE NULL
            END

SET @ComposeBody = ISNULL(@tableHTML_AssignedTo, '') +
                   ISNULL(@tableHTML_SubmittedBy, '') +
                   ISNULL(@Note, '') 

我知道这是一个简单的代码,但在我看来,我做错了什么并不明显。但是使用我的代码,如果两个表都是空的,则会发送一封空电子邮件。如果我删除了Notes,则不会发送电子邮件,但我想在电子邮件中添加Notes

注意:我在游标中执行此代码以递归方式发送电子邮件

1 个答案:

答案 0 :(得分:2)

我会这样做 - 看起来更简单。

这里的技巧是了解null如何与concat一起工作。任何以null结尾的内容都为null。因此,如果Assigned或submit为null,则COALESCE的第一个参数将为null。每个下一步都会检查另外两个案例。

SET @Note = 'Note: The tickets with the following statuses are not listed in this alert: Closed,Rejected'; 

SET @ComposeBody = COALESCE(
     @tableHTML_AssignedTo+@tableHTML_SubmittedBy+@Note,  -- Selected if both non null
     @tableHTML_AssignedTo+@Note,                         -- Selected if SubmittedBy null
     @tableHTML_SubmittedBy+@Note)                        -- Selected if AssignedTo null
                       -- Both are null, set body to null.