sql中的动态函数 - 使用IF

时间:2015-06-24 09:17:02

标签: sql sql-server sql-server-2008

我有一个小问题

 @CMD nvarchar (MAX)='' 
SELECT @CMD +=N'


 SELECT
     COUNT(CASE WHEN RFRD.QueuTypeID=4
           THEN RFRD.QueuTypeID
           END) RequiredaQueue
    ,COUNT(CASE WHEN RFRD.QueuTypeID=3
          THEN RFRD.QueuTypeID
          END) BhinaQueue      
    ,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4) 
    ,COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+''' ,''*'')A'                                              
FROM #cte RF 

p.s - From不在动态之中。

这里工作正常...... 但是当我添加IF声明时:

   SELECT
     COUNT(CASE WHEN RFRD.QueuTypeID=4
           THEN RFRD.QueuTypeID
           END) RequiredaQueue
    ,COUNT(CASE WHEN RFRD.QueuTypeID=3
          THEN RFRD.QueuTypeID
          END) BhinaQueue      
    ,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4)'
     **IF @MyParam IS NOT NULL**
   SET @CMD+='
    ,COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+'''                                               ,''*'')A'                                              
FROM #cte RF 

该计划并不了解RF的含义。 它没有看到FROM #cte RF Anymore。 任何人都知道IF陈述的问题是什么? 感谢

1 个答案:

答案 0 :(得分:1)

然后不要使用if。使用case

 @CMD nvarchar (MAX)='' 

SELECT @CMD +=N'
 SELECT
     COUNT(CASE WHEN RFRD.QueuTypeID=4
           THEN RFRD.QueuTypeID
           END) as RequiredaQueue
    ,COUNT(CASE WHEN RFRD.QueuTypeID=3
          THEN RFRD.QueuTypeID
          END) as BhinaQueue   
    ,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4) '
    (case when @MyParem is not null then ',COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+''' ,''*'')A' 
          else ''
     end)  + '                                           
FROM #cte RF ';

所有代码都在select语句中,因此case是适当的结构,而不是if