Хранимая процедура: поиск в таблице при передаче массива значений - PullRequest
1 голос
/ 05 августа 2010

Мне нужно создать хранимую процедуру, которая получает параметр (с именем @codes).

Это строка, которая содержит список кодов, разделенных точкой с запятой. Мне нужно заглянуть внутрь таблицы и вернуть все строки, которые имеют код (который находится в столбце EANcodes), который был передан в параметре @codes.

Может кто-нибудь помочь мне начать. Мои знания о хранимых процедурах очень ограничены.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 августа 2010

В идеале, я бы предпочел, чтобы параметр передавался другим способом, используя параметр табличного значения (при условии SQL 2008) или XML, который можно легко разбить на таблицы.

В качестве альтернативы, используйте функцию разделения SQL (например, здесь ), чтобы проанализировать строку во временной таблице, а затем объединиться с этой таблицей в вашем запросе выбора.

0 голосов
/ 05 августа 2010

Хранимые процедуры на самом деле не предназначены для обработки списка строк в качестве параметра.Было бы лучше разделить его на код приложения и затем многократно вызывать хранимую процедуру, указав в качестве параметра каждую из них.

Однако, если вы чувствуете необходимость сделать это таким образом.Вы можете перебрать строку и использовать CHARINDEX, чтобы найти следующий индекс точки с запятой, а затем использовать SUBSTRING, чтобы получить следующий код.Затем вы можете использовать CTE для соответствующих строк на каждой итерации, а когда цикл завершится, просто верните CTE.Это довольно глупо, но я не могу придумать другого способа сделать это.(Это строковые функции T-SQL)

Для получения информации о функциях обработки строк (в T-SQL): http://msdn.microsoft.com/en-us/library/ms186323.aspx

А вот аналогичные функции в MySQL: http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

...