【问题标题】:Case Statement Set Parameter案例语句集参数
【发布时间】:2012-09-21 12:07:48
【问题描述】:
SELECT (CASE
        WHEN(percentage >= @Start AND percentage < @End)                        
        THEN 
            SET @body ='<html><body><H3>Report</H3>
                        <table border = 1> 
                        <tr>
                        <th>No </th> <th> date </th> <th> lag </th> <th> Variance </th></tr>'    
            SET @body = @body + @xml +'</table></body></html>' 
        ELSE 'NULL' END) as Variance  
    FROM TestTbl

消息 156,级别 15,状态 1,过程 SP_CheckDB,第 31 行 关键字“SET”附近的语法不正确。 消息 156,级别 15,状态 1,过程 SP_CheckDB,第 36 行 关键字“ELSE”附近的语法不正确

请帮我解决这个问题

谢谢

【问题讨论】:

  • CASE 是一个表达式 - 它产生一个。它不是控制流语句。

标签: sql sql-server sql-server-2005


【解决方案1】:

使用这个

Declare @str VARCHAR(MAX)

SET @str = '<html><body><H3>Report</H3>
            <table border = 1> 
            <tr>
                <th>No </th> <th> date </th> 
                <th> lag </th> <th> Variance </th>
            </tr>'+ @xml +'</table></body></html>' 


SELECT (CASE
        WHEN(percentage >= @Start AND percentage < @End)                        
        THEN @str
        ELSE 'NULL' END) as Variance  
FROM TestTbl

DECLARE @body VARCHAR(MAX) = 'NULL'

    IF(percentage >= @Start AND percentage < @End) THEN
    BEGIN
        SET @body ='<html><body><H3>Report</H3>
                    <table border = 1> 
                    <tr>
                        <th>No </th> <th> date </th> 
                        <th> lag </th> <th> Variance </th>
                    </tr>'    
        SET @body = @body + @xml +'</table></body></html>' 
    END

    SELECT Variance = @body

【讨论】:

    【解决方案2】:

    如果你只想要条件赋值,那么你需要这样做:

    SELECT TOP 1 @body = (CASE
            WHEN(percentage >= @Start AND percentage < @End)                        
            THEN 
                 '<html><body><H3>Report</H3>
                            <table border = 1> 
                            <tr>
                            <th>No </th> <th> date </th> <th> lag </th> <th> Variance </th></tr>'    
                + @xml +'</table></body></html>' 
            ELSE 'NULL' 
            END)
     FROM TestTbl
    

    虽然请注意,您不能在同一语句中分配 + 选择。

    【讨论】:

      【解决方案3】:
      SELECT @body=(CASE WHEN(percentage >= @Start AND percentage < @End)                        
              THEN ('<html><body><H3>Report</H3>
                              <table border = 1> 
                              <tr>
                              <th>No </th> <th> date </th> <th> lag </th> <th> Variance </th></tr>'+@xml +'</table></body></html>')
              ELSE 'NULL' END) as Variance  
          FROM TestTbl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多