【发布时间】:2013-03-20 15:22:22
【问题描述】:
我对 SQL 很陌生,所以如果我的问题显得微不足道,或者我似乎还没有完成我的工作,请先道歉。我正在努力学习如何掌握很多这些概念。
无论如何,我正在编写一个复杂的查询,该查询最终会采用许多参数。对于这些参数,我将使用逗号分隔的字符串来允许多个变量。 (我之前已经解决了这个问题,但在尝试执行 SP_ExecuteSQL 时没有解决。
话虽如此,这里是查询的基本内容。
DECLARE @system_status varchar(30)
SELECT @system_status = '12,14'
DECLARE @sql nvarchar(4000)
SELECT @sql = 'SELECT [system_status]
FROM VW_Document_Main
WHERE 1=1 '
IF @System_Status = '-1'
Begin
SELECT @sql = @sql + 'and system_status <> 20'
End
ELSE IF @system_status IS NOT NULL AND @system_status NOT IN ('-1','0')
Begin
SELECT @sql = @sql + 'and ' + @system_Status + ' LIKE ''%,'' + system_Status + '',%'''
当我没有将它构建到 sp_executesql 语句中时,我能够填充一个可用的查询,但是,由于我将构建这个查询,因此有必要采取这些步骤......关于我为什么生成的任何想法非布尔错误?
编辑:不确定这是否是朝着正确方向迈出的一步,但现在在修改最终的 SELECT 语句后:
SELECT @sql = @sql + 'and '',''' + @system_Status + '',''' LIKE ''%,' + 'system_Status' + ',%'''
它给了我一个不同的错误:为变量赋值的 SELECT 语句不能与数据检索操作结合使用。
值得注意的是,错误显示为:在预期条件的上下文中指定的非布尔类型的表达式,靠近 ','。
【问题讨论】:
-
@system_status 是一个 varchar,但你有 'and system_status 20' 没有 20 左右的单引号。我不知道这是否是你唯一的问题,但你需要纠正它。跨度>
标签: sql sql-server dynamic boolean concatenation