В SQL Server 2008 мне нужно иметь возможность передавать параметр, который позволяет использовать все значения, конкретные значения или несколько значений. Ниже sql работает нормально, когда параметр «Все». И отлично работает с одним значением. Но с несколькими значениями я получаю «Msg 4145, Level 15, State 1, Line 7 Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с ','." Я пробовал несколько вещей, но не получал.Параметр SQL в where, который допускает все, конкретные или несколько значений
--Works fine
Declare @sql varchar(8000)
,@p_CODE varchar(100)
,@v_CODE VARCHAR(100)
Set @p_CODE = ('''All''')
Set @v_CODE = @p_CODE
select @sql = 'SELECT distinct
\t CODE
\t FROM \t TABLE
\t WHERE \t '[email protected]_CODE+' in ('+'''All'''+')
\t \t or CODE in ('[email protected]_CODE+')'
Execute (@sql)
--Returns all records \t
\t
\t
--Works fine \t \t
Declare @sql varchar(8000)
,@p_CODE varchar(100)
,@v_CODE VARCHAR(100)
Set @p_CODE = ('''ABCD''')
Set @v_CODE = @p_CODE
select @sql = 'SELECT distinct
\t CODE
\t FROM \t TABLE
\t WHERE \t '[email protected]_CODE+' in ('+'''All'''+')
\t \t or CODE in ('[email protected]_CODE+')'
Execute (@sql) \t \t
--Returns records with ABCD
--Returns error as noted
Declare @sql varchar(8000)
,@p_CODE varchar(100)
,@v_CODE VARCHAR(100)
Set @p_CODE = ('''ABCD'',''EFGH''')
Set @v_CODE = @p_CODE
select @sql = 'SELECT distinct
\t CODE
\t FROM \t TABLE
\t WHERE \t '[email protected]_CODE+' in ('+'''All'''+')
\t \t or CODE in ('[email protected]_CODE+')'
Execute (@sql)
Спасибо Саймон, но это не возвращает никаких результатов, и он должен ... 'Признаться @sql VARCHAR (8000) , @p_CODE VARCHAR (100) , @ v_CODE VARCHAR (100) Set @p_CODE = ('' 'ABCD' ' '' EFGH ''') Set @v_CODE = @p_CODE выберите @sql = «SELECT отчетливый \t КОД \t ОТ \t ТАБЛИЦА \t WHER E \t CODE IS NULL ИЛИ КОД в ('+ @ v_CODE +') \t ' Execute (@sql) мне нужно, чтобы иметь возможность вернуть все результаты. Thx – write2dougr
Извините, я сделал ошибку, и ясно, что я не был в ясном сознании. :) Я изменил ответ и, пожалуйста, проверьте обновленный ответ. –