我正在使用以下T生成动态SQL
Declare @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它工作得很好,但我想使用case时将其转换为静态SQL。
请给出一些建议来转换这份声明。
发布于 2015-09-18 10:11:45
这是查询
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))发布于 2015-09-18 10:20:44
马蒂亚的答案是正确的,如果你想用用例的时候,那么这里有一个选择(虽然我更喜欢马蒂亚的)
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
ENDhttps://stackoverflow.com/questions/32649347
复制相似问题