我正在使用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
然而,当我这样做时,它会返回整个列表。想法/建议?
如果您将最后一行更改为PRINT @sql
,您将注意到两个条件都存在。试着把你的代码改成这样。
if @owner <> ''
Begin
if @owner = 'Unassigned'
SELECT @sql = @sql + 'and owner IS NULL'
else
SELECT @sql = @sql + 'and owner LIKE ''%'+@owner+'%'''
END
也可以使用CASE表达式
SELECT @sql = @sql + CASE ISNULL(@owner, '')
WHEN '' THEN ''
WHEN 'Unassigned' THEN ' and owner IS NULL'
ELSE ' and owner LIKE ''%' + @owner + '%''' END