首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server子句中引入基于特定条件的过滤器

在Server子句中引入基于特定条件的过滤器
EN

Stack Overflow用户
提问于 2015-09-18 10:06:57
回答 2查看 33关注 0票数 0

我正在使用以下T生成动态SQL

代码语言:javascript
复制
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。

请给出一些建议来转换这份声明。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-18 10:11:45

这是查询

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-09-18 10:20:44

马蒂亚的答案是正确的,如果你想用用例的时候,那么这里有一个选择(虽然我更喜欢马蒂亚的)

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32649347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档