Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用SP_ExecuteSQL时,我生成了一个布尔错误_Sql_Sql Server_Dynamic_Boolean_Concatenation - Fatal编程技术网

在使用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

我对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 + '',%'''
这给了我一个不同的错误:为变量赋值的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