在动态 SQL 的“IN”子句中使用 CSV 字符串值
Posted
技术标签:
【中文标题】在动态 SQL 的“IN”子句中使用 CSV 字符串值【英文标题】:Using CSV string Values in 'IN' clause of Dynamic SQL 【发布时间】:2015-08-04 11:26:11 【问题描述】:我有一个存储过程,它接受 csv 字符串作为参数,例如。 ('IN\libin.jose,IN\Pallabi.P')。存储过程包含一些在 IN 子句中使用此参数的动态 sql,例如:(AND u1.UserName IN (' + @UserNames + '))。由于这是在动态 sql 中,如果不将额外的单引号附加到 CSV 值,则条件不会通过,例如 ('''IN\libin.jose '' ,''IN\Pallabi.P''')
--exec [GetUwParameterDetails] 'IN\libin.jose,IN\Pallabi.P' , 'false'
ALTER PROCEDURE [dbo].[GetUwParameterDetails]
@UserNames nvarchar(max),
@IncludeInactiveusers bit
AS
BEGIN
declare @selectedUsers nvarchar(max)
--set @selectedUsers = '''IN\libin.jose '' ,''IN\Pallabi.P''';
set @selectedUsers = 'IN\libin.jose,IN\Pallabi.P';
declare @selectedPermissions nvarchar(max)
set @selectedPermissions = '''Underwrite'',''ManageUwTeamPipeline''';
DECLARE @parameterQuery1 AS NVARCHAR(MAX);
set @parameterQuery1 = '
;WITH cte_users
AS (
SELECT users.id
,users.UserName
,users.FirstName
,users.lastname
,users.Email
,users.E3UserName
,UserStatus.[Status]
,Widgets.[Description] DefaultWidget
FROM users
INNER JOIN userparametervalues upv ON users.id = upv.userid
INNER JOIN Parameters p on upv.ParameterId = p.id
AND p.Name = ''UwHierarchy''
INNER JOIN UserPermissions up ON users.id = up.userid
INNER JOIN [Permissions] ps on up.PermissionId = ps.Id
AND ps.IsActive = 1 AND ps.Name IN ('+ @selectedPermissions +')
INNER JOIN users AS u1 ON upv.value = u1.id
AND u1.UserName IN (' + @UserNames + ')
INNER JOIN UserStatus ON users.StatusId = UserStatus.Id
LEFT JOIN Widgets ON users.WidgetId = Widgets.Id )select * from cte_users ';
exec @parameterQuery1
END
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:在 BEGIN 之后使用它
set @UserNames =''''+replace(@usernames,',',''',''')+''''
【讨论】:
以上是关于在动态 SQL 的“IN”子句中使用 CSV 字符串值的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中从字符串数组(或元组)创建动态 sql“in list”子句的“最佳”方法是啥? [复制]