我的查询比我在这里发布的要复杂得多,但是在使用sp_execute
SQL时我无法使用变量...是否有解决方法?
declare @system_status varchar(30)
select @system_status = '12,20'
declare @sql nvarchar(4000)
select @sql = 'SELECT [system_status]
FROM VW_Document_Main
WHERE 1=1 '
IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0')
BEGIN
SELECT @sql = @sql + 'and (',''+@system_Status+'',') LIKE ''%,''+system_Status+'',%'''
我正在尝试将字符串连接到SQL的末尾,并最终使用sp_executesql
但是,我收到有关串联的错误消息:
为变量赋值的SELECT语句不能是 与数据检索操作相结合。
关于如何解决它/解决方法的任何想法?
....那令人尴尬,SET代替SELECT工作得很好......
答案 0 :(得分:1)
您的SELECT中的逗号有问题。我不完全确定你要做什么,所以这里有两种可能的方法让我有所作为。
1)删除逗号。
SELECT @sql = @sql + 'and ('''+@system_Status+''') LIKE ''%,''+system_Status+'',%'''
这使查询看起来像这样。
SELECT [system_status]
FROM VW_Document_Main
WHERE 1=1 and ('12,20') LIKE '%,'+system_Status+',%'
2)添加更多引号,使逗号不在字符串之外。
SELECT @sql = @sql + 'and ('',''+@system_Status+'','') LIKE ''%,''+system_Status+'',%'''
这就是这样的输出。
SELECT [system_status]
FROM VW_Document_Main
WHERE 1=1 and (','+@system_Status+',') LIKE '%,'+system_Status+',%'
答案 1 :(得分:0)
你的动态sql construnction有错误。我认为你在最后一行中需要的是这样的:
SELECT @sql = @sql +
'and ('+','+@system_Status+',) LIKE ''%,'+
@system_Status+',%'''
答案 2 :(得分:0)
你遗漏了一些引号:
declare @system_status varchar(30)
select @system_status = '12,20'
declare @sql nvarchar(4000)
select @sql = 'SELECT [system_status]
FROM VW_Document_Main
WHERE 1=1 '
IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0')
BEGIN
SELECT @sql = @sql + 'and ('','+@system_Status+','') LIKE ''%,''+system_Status+'',%'''
END
SELECT @sql