Я пытаюсь использовать список возвращаемых каретой разделенных параметров в списке IN
инструкции where
моего запроса.Рассчитанный параметр в WHERE
Я могу превратить список в одну строку, разделенную запятой, в правильном формате с использованием функции replace
, однако, когда я помещаю это в список IN
, он ничего не возвращает.
Нижеприведенный запрос возвращает список, разделенный запятой, как ожидалось.
declare @VarCodes varchar(max)
set @VarCodes = '123-1
123-10
123-100
61
66
67
75'
(select ''''+replace(replace(REPLACE(@VarCodes,char(13),''''+', '+''''),char(32),''),char(10),'')+'''')
'123-1', '123-10', '123-100', '61', '66', '67', '75'
Если я вставить этот текст непосредственно в запросе ниже он возвращает данные, как ожидалось.
select vad_variant_code from variant_detail where vad_variant_code in ('123-1','123-10','123-100','61','66','67','75')
Если я ставлю параметр в in
, она ничего не возвращает.
select vad_variant_code from variant_detail where vad_variant_code in ((select ''''+replace(replace(REPLACE(@VarCodes,char(13),''''+', '+''''),char(32),''),char(10),'')+''''))
Я предполагаю, что это происходит потому, что IN
ожидает разделенный запятыми список строк, где, как функция replace
возвращает одну длинную строку?
Возможно ли это?
1) Динамический SQL 2) Таблица многозначного Параметр 3) Таблица значной функции разделение ... – lad2025
Уход за разработкой? :) – OWSam
Возможный дубликат [Определить переменную для использования с оператором IN (T-SQL)] (http://stackoverflow.com/questions/1707326/define-variable-to-use-with-in-operator-t-sql) – lad2025