0

我的查询比我在这里发布的要复杂得多,但是在使用 SQL 时我无法使用变量sp_execute……有解决方法吗?

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 效果很好...

4

3 回答 3

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+',%'
于 2013-03-20T20:01:09.770 回答
0

您的动态 sql 构造有错误。我认为你在最后一行需要的是这样的:


SELECT @sql = @sql + 
              'and ('+','+@system_Status+',) LIKE ''%,'+
              @system_Status+',%''' 

于 2013-03-20T19:57:32.033 回答
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
于 2013-03-20T19:58:26.050 回答