首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中设置where子句basis参数值

在SQL Server中设置where子句basis参数值
EN

Stack Overflow用户
提问于 2021-11-26 09:02:11
回答 3查看 48关注 0票数 0

我希望在我的SQL server查询中使用从用户记录的WHERE子句basis @USER_ID输入时设置一个条件,但是我想我在这里遗漏了一些重要的东西。

代码语言:javascript
复制
DECLARE @USER_ID NVARCHAR(255) = 'a,b,c' -- will be multi-select parameter; can be null as well 


select * from <table_name>

{
if:      @USER_ID is NULL then no WHERE condition
else:    WHERE <table_name>.<col_name> in (SELECT item FROM SplitString(@USER_ID,','))
}

有人能帮帮忙吗?

EN

回答 3

Stack Overflow用户

发布于 2021-11-26 09:23:59

就我个人而言,我建议切换到表类型参数,这样就完全不需要使用STRING_SPLIT了。不过,我不打算在这里介绍上述类型的参数的创建;已经有很多参数的创建,文档也足以解释它。

至于问题,如果我们要使用STRING_SPLIT,您将使用如下所示的方法:

代码语言:javascript
复制
SELECT {Your Columns} --Don't use *
FROM dbo.YourTable YT
WHERE YT.YourColumn IN (SELECT SS.Value
                        FROM STRING_SPLIT(@USER_ID,',') SS)
   OR @USER_ID IS NULL
OPTION (RECOMPILE);

OPTION子句中的RECOMPILE很重要,因为@USER_ID具有值NULL的查询可能与没有值的查询非常不同。

您可以使用动态SQL方法,但是对于一个参数,我怀疑除了可以忽略不计的好处之外,还会有更多的东西。使用上面的方法也更容易让其他人理解,对于这样一个简单的查询,每次运行查询时生成计划的成本应该很小。

通过使用表类型参数,使用如下所示的UNION ALL查询实际上可能会更有性能(假设您在YourColumn上有一个可用的索引):

代码语言:javascript
复制
SELECT {Your Columns} --Don't use *
FROM dbo.YourTable YT
     JOIN @Users U ON YT.YourColumn = U.UserId
UNION ALL
SELECT {Your Columns} --Don't use *
FROM dbo.YourTable YT
WHERE NOT EXISTS (SELECT 1 FROM @Users U);
票数 2
EN

Stack Overflow用户

发布于 2021-11-26 09:04:34

你可以在这里完全避免使用STRING_SPLIT

代码语言:javascript
复制
WHERE ',' + @USER_ID + ',' LIKE '%,' + <table_name>.<col_name> + ',%'
票数 0
EN

Stack Overflow用户

发布于 2021-11-26 13:36:46

如果@UserID为NULL,则执行条件(1=1),这始终为真。如果@UserID不为NULL,则执行OR条件,其中(a,b,c)中的所有都存在。

代码语言:javascript
复制
SELECT * 
FROM <table_name>
WHERE (1=1)
    AND ((@USER_ID IS NULL AND (1=1)) -- always true
        OR (<table_name>.<col_name> in (SELECT [value] FROM SplitString(@USER_ID,',')))
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70121844

复制
相关文章

相似问题

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