是否可以将值传递给存储过程以告诉它是否在SQL SELECT语句后附加OR语句?

我已经尝试过类似的方法,但这是无效的:

SELECT xyzName
FROM xyz_fields
WHERE (xyzType = 'this') UNION ALL
(if @status=1 OR (xyzType = 'that')) UNION ALL
(if @status2=1 OR (xyzType = 'somethingelse'))


有点像在SQL中建立WHERE子句,而不是再次从应用程序访问数据库?

最佳答案

您可以为此使用动态SQL。

declare @SqlQuery varchar(100)

Set @SqlQuery = ' SELECT xyzName FROM xyz_fields WHERE  xyzType = ''this'' '

if(@status=1)
Set @SqlQuery = @SqlQuery + ' OR xyzType = ''that'' '

if(@status2=1)
Set @SqlQuery = @SqlQuery + ' OR xyzType = ''somethingelse'''

exec(@SqlQuery)


查询中的单个qoutes通过为另一个单个qoute加上前缀来转义。
所以在查询

WHERE  xyzType = 'this'


应该

WHERE  xyzType = ''this''

关于sql - SQL WHERE子句中的IF语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16670414/

10-11 03:14