2

我正在使用 sp_executesql,因此我可以灵活选择返回的内容。尝试返回没有数据的地方时遇到问题。

比如说我试图找到所有没有分配所有者的行。目前,我的查询编写如下。

 if @owner <> ''
    Begin
        SELECT @sql = @sql + 'and owner LIKE ''%'+@owner+'%'''
    END

这使我不必选择所有者。如果我这样做,它当然会包含在我的查询中。

因为我现在正在尝试添加一条基本上允许我带回未分配所有者的行:

 if @owner = 'Unassigned'
BEGIN
    SELECT @sql = @sql + 'and owner IS NULL' 
END

但是,当我这样做时,它会带回整个列表。想法/建议?

4

2 回答 2

3

如果您将最后一行更改为PRINT @sql您会注意到这两个条件都存在。尝试将您的代码更改为此。

if @owner <> ''
Begin
    if @owner = 'Unassigned'
        SELECT @sql = @sql + 'and owner IS NULL'
    else
        SELECT @sql = @sql + 'and owner LIKE ''%'+@owner+'%'''
END
于 2013-03-26T15:31:06.600 回答
0

您也可以将选项与CASE表达式一起使用

SELECT @sql = @sql + CASE ISNULL(@owner, '') 
                       WHEN '' THEN ''
                       WHEN 'Unassigned' THEN ' and owner IS NULL'
                       ELSE ' and owner LIKE ''%' + @owner + '%''' END
于 2013-03-26T17:16:28.683 回答