在使用SP_ExecuteSQL时,我生成了一个布尔错误
我对SQL非常陌生,所以如果我的问题很琐碎或者看起来好像我还没有完成我的工作,请允许我首先道歉。我正在努力学习如何掌握这些概念 无论如何,我正在编写一个复杂的查询,它最终将使用许多参数。对于这些参数,我将使用逗号分隔的字符串来允许多个变量。我以前解决过这个问题,但在尝试执行SP_ExecuteSQL时没有解决 话虽如此,以下是问题的要点在使用SP_ExecuteSQL时,我生成了一个布尔错误,sql,sql-server,dynamic,boolean,concatenation,Sql,Sql Server,Dynamic,Boolean,Concatenation,我对SQL非常陌生,所以如果我的问题很琐碎或者看起来好像我还没有完成我的工作,请允许我首先道歉。我正在努力学习如何掌握这些概念 无论如何,我正在编写一个复杂的查询,它最终将使用许多参数。对于这些参数,我将使用逗号分隔的字符串来允许多个变量。我以前解决过这个问题,但在尝试执行SP_ExecuteSQL时没有解决 话虽如此,以下是问题的要点 DECLARE @system_status varchar(30) SELECT @system_status = '12,14' DECLARE @sql
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 + '',%'''
这给了我一个不同的错误:为变量赋值的SELECT语句不能与数据检索操作相结合
值得注意的是,错误内容为:在预期条件的上下文中指定的非布尔类型的表达式,靠近“,”。您正在将文本@system_状态值“12,14”插入最终SQL中,因此它看起来像这样
SELECT [system_status] FROM VW_Document_Main WHERE 1=1 and 12,14 LIKE '%,' + system_Status + ',%'
这将失败,因为你没有12,14的引号。因此,您必须修改该行
SELECT @system_status = '12,14'
将来
或者,既然您说您是通过sp_executeSql运行这个,那么您应该将上次选择修改为
SELECT @sql = @sql + 'and @system_Status LIKE ''%,'' + system_Status + '',%'''
并将执行SQL过程更改为
sp_executesql @sql, N'@system_status varchar(30)', @system_status
@system_status是一个varchar,但您有“和system_status 20”,在20左右没有单引号。我不知道这是否是您唯一的问题,但您需要更正。它正在运行查询,没有任何错误,但仍影响0行。即使我只使用一个变量。。hmm当您从VW_Document_Main运行SELECT[system_status]时,肯定会返回一行,其中system_status如“%,12,14,%”
SELECT @sql = @sql + 'and @system_Status LIKE ''%,'' + system_Status + '',%'''
sp_executesql @sql, N'@system_status varchar(30)', @system_status