“为变量赋值的SELECT语句不能与数据检索操作相结合。”关于SP中的变量

时间:2013-03-20 19:42:54

标签: sql-server stored-procedures dynamic-sql

我的查询比我在这里发布的要复杂得多,但是在使用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工作得很好......

3 个答案:

答案 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