我正在使用以下T-SQL
形成动态SQLDeclare @sql nvarchar(max);
Declare @var1 int = 10, @var2 int = 10, @var3 int = 10
set @sql = 'select col1, col2, col3
from table
where col1 = ' + @var1
IF (@var2 > 0)
BEGIN
SET @sql += ' AND col2 = ' + CONVERT(NVARCHAR(10), @var2)
END
IF (@var3 > 0)
BEGIN
SET @sql += ' AND col3 = ' + CONVERT(NVARCHAR(10), @var3)
END
它运行正常,但我希望使用大小写时将其转换为静态SQL。
请提出一些转换此声明的建议。
答案 0 :(得分:1)
这是查询
select col1,col2,col3
from table
where col1=@var1 AND
(@var2<=0 OR col2=CONVERT(NVARCHAR(10), @var2)) AND
(@var3<=0 OR col3=CONVERT(NVARCHAR(10), @var3))
答案 1 :(得分:1)
Mattia的回答是正确的,如果你想使用CASE WHEN,那么这里有另一种选择(虽然我更喜欢Mattia的)
SELECT
Col1, Col2, Col3
FROM
Table1
WHERE
Col1 = @Var1
AND Col2 = CASE
WHEN @Var2 > 0 THEN CONVERT(NVARCHAR(10), @var2)
ELSE Col2
END
AND Col3 = CASE
WHEN @Var3 > 0 THEN CONVERT(NVARCHAR(10), @var3)
ELSE Col3
END