我下面的动态查询有效,但想知道我下面的内容是否可以优化,或者是否有更好的方法。
我有一个网络表单,用户可以在其中输入位置和收集日期。对于收集的日期,我有收集的起始日期和收集的日期。用户将收集的截止日期留空,在这种情况下,它将执行比收集的起始日期更大的操作。
请注意我是如何在下面执行 IS NOT NULL 和 1=1 的。还想知道动态 SQL 是否是最好的方法,或者是否有更简单的方法来做到这一点。
DECLARE @sql varchar(max);
SET @sql = 'SELECT * from tblProgram WHERE 1=1'
IF (@Location IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND Location = ' + @Location
END
IF (@FromDateCollected IS NOT NULL AND @ToDateCollected IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND pw.DateCollected >= ' + QUOTENAME(convert(varchar, @FromDateCollected,101),'''')
+ ' AND pw.DateCollected <= ' + QUOTENAME(convert(varchar, @ToDateCollected,101),'''')
END
ELSE IF (@FromDateCollected IS NOT NULL AND @ToDateCollected IS NULL)
BEGIN
SET @sql = @sql + ' AND pw.DateCollected >= ' + QUOTENAME(convert(varchar, @FromDateCollected,101),'''')
END
exec(@sql)