【问题标题】:How to do an inline if-then in SQL statement syntax如何在 SQL 语句语法中执行内联 if-then
【发布时间】:2012-08-29 21:21:27
【问题描述】:

我正在尝试将我的电子邮件附加到我的@email 字符串中,传入了错误的@status。它可以在没有我注释掉的行的情况下工作。我想我很接近,但语法错误。 @override_email 为空。

DECLARE @retval INT
DECLARE @email nvarchar(200)
DECLARE @override_email nvarchar(200) = null
DECLARE @status INT = 2
DECLARE @in_customer_id INT = 160308

SET @email = COALESCE(@override_email, (
                      SELECT
                        COALESCE(CustomerDetail.Email, '')
                        /*+ (if @status NOT IN (3,4,5) ', alex@email.com')*/
                      FROM
                        tbl_customer_detail     CustomerDetail
                      WHERE
                        CustomerDetail.customer_id = @in_customer_id))                      
select @email

【问题讨论】:

    标签: sql sql-server-2008 tsql stored-procedures sql-server-2008-r2


    【解决方案1】:

    您可以使用CASE 表达式来做到这一点:

    DECLARE @retval INT
    DECLARE @email nvarchar(200)
    DECLARE @override_email nvarchar(200) = null
    DECLARE @status INT = 2
    DECLARE @in_customer_id INT = 160308
    
    SET @email = COALESCE(@override_email, (
                          SELECT
                            COALESCE(CustomerDetail.Email, '')
                            + case when @status NOT IN (3,4,5) then ', alex@email.com' else '' end
                          FROM
                            tbl_customer_detail     CustomerDetail
                          WHERE
                            CustomerDetail.customer_id = @in_customer_id))                      
    select @email
    

    【讨论】:

    • 我发誓我试过案例。我不认为我放了then,这一定是我的问题。一直让我发疯。这让我等了 4 分钟才接受这个答案......
    • 我也有过这样的日子。此外,如果没有@override_email 或任何CustomerDetail.Email,您可能会添加一个您可能不想要的逗号。
    • 我正在使用CDO 发送电子邮件,它似乎可以毫无问题地处理流浪,。不过我确实对此进行了测试,如果发生这种情况,我会遇到更大的问题,哈哈。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多