我正在使用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
然而,当我这样做时,它会带回整个列表。想法/建议?
答案 0 :(得分: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
答案 1 :(得分:0)
您也可以使用CASE表达式选项
SELECT @sql = @sql + CASE ISNULL(@owner, '')
WHEN '' THEN ''
WHEN 'Unassigned' THEN ' and owner IS NULL'
ELSE ' and owner LIKE ''%' + @owner + '%''' END