我是一个sql初学者。这可能是一个老帖子,但我没有得到任何简化的解决方案。
我关心的是如何使用 IN
动态sql中的子句,其中 IN
项目基于具有多个值的参数。
我有一个名为employee的表。
我已经编写了一个动态sql,它将返回 Department = 'IT,System'
sql语句:
Declare @Department varchar(50)
Declare @SQL nvarchar(MAX)
Declare @Parameters nvarchar(50)
Set @Department='IT,System'
SET @SQL = 'select * from Employee where Department IN(@PDepartment)'
SET @Parameters=N'@PDepartment nvarchar(50)'
--PRINT @SQL
EXEC sp_Executesql @SQL,@Parameters,@PDepartment=@Department
此脚本不适用于多个部门,并且不返回任何结果。如果 @Department = 'IT'
这里我已经提到了真实场景的一小部分。在实际情况中,表名是将包含在 IN
运算符都是动态的,将被接受为存储过程参数。
谢谢你的帮助。
2条答案
按热度按时间erhoui1w1#
这个查询应该会出错,因为在列表的元素周围缺少单引号。
使用表变量作为参数比使用csv字符串简单得多。
至于处理字符串参数,实际上不需要动态sql。如果运行的是sql server 2016或更高版本,则可以使用表值函数
string_split()
:在早期版本中,您可以使用
like
:enyaitl32#
我对此不太感兴趣,你必须小心部门名称中有撇号,但一个简单的解决方案可能是: