【问题标题】:creating dynamic query in variable在变量中创建动态查询
【发布时间】:2014-03-10 12:06:45
【问题描述】:

我在 sql server 2005 存储过程中创建一个动态查询,如果出现错误,我会收到错误消息 日期被发送为空/null 到存储过程:

This input parameter cannot be converted

那么,如何签入只隐藏id日期不为空的存储过程: 以下是我的查询。我已经检查了 if 条件中的 null,但它也显示错误

If @startDate IS NOT NULL AND @endDate is Not null
    Begin    
       set @strCondition = ' FO.Rf_Date  >= convert(datetime, ''' + Convert(varchar,@startDate,112) + ''') and  FO.Rf_Date<= convert(datetime, ''' + Convert(varchar,@endDate,112) + ''')'
    End  

【问题讨论】:

    标签: sql-server database sql-server-2008 sql-server-2005


    【解决方案1】:

    如果它们可以为空 null,您还需要排除空变量,例如

    IF NULLIF(@startDate, '') IS NOT NULL AND NULLIF(@endDate, '') IS NOT NULL
    

    【讨论】:

      【解决方案2】:

      您还可以使用 ISDATE() 函数以及类似这样的 CASE 语句..

      SET @strCondition = N' SELECT * FROM TableName WHERE 1 = 1 '     --<-- 1 = 1 so you can append any more line starting with 'AND'
                         + CASE WHEN ISDATE(NULLIF(@startDate,'')) = 1  
                                 THEN   N' AND FO.Rf_Date  >= convert(datetime, ''' + Convert(varchar,@startDate,112) + ''') '
                                ELSE N'' END
                         + CASE WHEN ISDATE(NULLIF(@endDate,'')) = 1                        
                                 THEN  N' AND  FO.Rf_Date  <= convert(datetime, ''' + Convert(varchar,@endDate,112) + ''')'
                                ELSE N'' END 
      

      注意

      如果传递的参数不是日期值,ISDATE() 函数返回 0,如果传递的值为 NULL,它也返回 0。

      【讨论】:

        猜你喜欢
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 2017-04-20
        相关资源
        最近更新 更多