【问题标题】:Using CSV string Values in 'IN' clause of Dynamic SQL在动态 SQL 的“IN”子句中使用 CSV 字符串值
【发布时间】: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

我怎样才能做到这一点?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    在 BEGIN 之后使用它

    set @UserNames =''''+replace(@usernames,',',''',''')+''''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多