使用SP_ExecuteSQL时返回NULL数据值

时间:2013-03-26 15:11:15

标签: sql sql-server null dynamic-sql sp-executesql

我正在使用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

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

2 个答案:

答案 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