2012-05-17 2 views
1

У меня есть хранимая процедура, которая принимает в качестве параметра список значений, которые нужно включить в запрос. Например NY, NJ, CT, PAФункция в SQL Server 2008 для размещения одинарных кавычек вокруг каждого элемента списка

В моем динамическом запросе SQL в хранимой процедуре, я хочу, чтобы выбрать записи

WHERE state IN ('NY', 'NJ', 'CT', 'PA'). 

Если я использую параметр, как он попадает в СП, я буду делать

WHERE state IN 'NY, NJ, CT, PA'. 

Поэтому мне нужно преобразовать

'NY, NJ, CT, PA' 

к

('NY','NJ','CT','PA'). 

Есть ли функция для этого?

Спасибо!

Эй, я думаю, Кевин указал в правильном направлении. Все, что мне нужно сделать, это:

WHERE state IN REPLACE(('NY, NJ, CT, PA'), ',' , ''',''') 

Или, так как я на самом деле есть в переменной ...

WHERE state IN REPLACE ((@StateList), ',' , ''',''') 
+0

http://www.codeproject.com/Articles/5986/Passing-a-Comma-Delimited-Parameter-to-a-Stored-Pr – JonH

+0

Вы говорите свой динамический запрос? так что 'WHERE state in ..' и т. д. в строке уже? –

+0

У вас есть контроль над тем, как данные передаются в сохраненный процесс? – bendataclear

ответ

1

Вот забавный способ сделать это без функции:

DECLARE @StateList VARCHAR(50)='NY, NJ, CT, PA' --(substitute for your parameter) 
SELECT * FROM Table WHERE ',' + REPLACE(@StateList,' ','') + ',' LIKE '%,' + State + ',%' 
+0

Эй, Кевин, спасибо большое. Ты дал мне эту идею. Я думаю, что все, что мне нужно сделать, это REPLACE ',' for '' ',' ''. – Amarundo

+0

О! Извините, @Amarundo, я думаю, я пропустил, что это был запрос Dynamic SQL, который вы делали. Хотя мое предложение все же помогло. –

1

Есть много способов сделать это. Один простой способ будет вставить их в временную таблицу (например, @temp_states) и сделать это:

WHERE state in (SELECT state from @temp_states) 

Вместо того, чтобы вставить их в таблицу, вы можете использовать функцию как this one для создания таблицы для вас:

WHERE state in (SELECT * from dbo.Split(',', 'NY,NJ,CT,PA')) 
1

очень простой вариант сделать:

WHERE CHARINDEX (CONCAT (', ', state,',') , CONCAT (', ', @PARAM,',')) > 0 
+2

Возможно, вы захотите это изменить. Как есть, у него были бы проблемы с пространствами между состояниями. –

+2

В дополнение к тому, что сказал Кевин, будут проблемы с первой и последней записью в списке. – dasblinkenlight

+1

Спасибо, не заметили пробелы. – bendataclear

Смежные вопросы