我会有一张桌子
TABLE1
ID Name Country
1 Anna Singapore
2 Brad UK
3 Cassie US
declare @place varchar(20);
set @place='US';
select * from Table1 where country=@place;
如果值为@place
则为null ???
然后,选择不会选择任何东西..
我想要的是对待,因为国家没有地方声明。而如果还有其他声明,它们将起作用..
知道怎么做吗?
答案 0 :(得分:3)
对于您问题中的这个简单案例,请使用
IF ( @place IS NULL )
SELECT *
FROM table1
ELSE
SELECT *
FROM table1
WHERE country = @place
如果您的实际情况更复杂,可以使用
select *
from Table1
where @place is null or country=@place
option (recompile)
需要recompile
提示的原因是为了避免单个计划适用于这两种情况并在您提供显式值的情况下进行不必要的扫描。
这些以及其他替代方案(如动态生成查询)将在文章Dynamic Search Conditions in T-SQL中详细讨论
答案 1 :(得分:1)
like
和=
在您的情况下是等效的,因为您正在处理text(char,nchar,varchar,nvarchar)值。
而不是
WHERE country = @place
试
WHERE country like @place
对于变量集try 而不是
set @place='US'
尝试
set @country = isnull('''US''','''%''')
测试一下:
declare @country nvarchar(50)
set @country = isnull('''US''','''%''')
print @Country
set @country = isnull(NULL,'''%''')
print @Country
额外的引号是必要的,因为在您的示例中您使用显式值 - '
是转义字符,并且您需要在每个值周围使用单引号来表示它不是表列。如果您使用的是COLUMN_NAME,则只需在%字符周围使用单引号。
根据您的SQL版本,您可能必须使用不同的通配符。 这是一个相当直接和线性的解决方案,尽管存在与开放变量相关的风险。