Передача нескольких параметров фильтрации в сохраненный Proc - PullRequest
1 голос
/ 29 июня 2010

Я уверен, что название моего вопроса не имеет особого смысла.Но вот чего я пытаюсь достичь.У меня есть таблица с разными историями (столбцы StoryID, StoryTitle, StoryDesc, StoryCategory), поэтому каждая история может принадлежать к категории.например, категория1, категория2, .... категория10.Мне нужен SP, где я указываю категории в качестве параметров (несколько категорий, в формате CSV или XML), и SP возвращает истории, принадлежащие этим категориям.

Я не уверен, что будет лучшим способом сделать это за один вызов SP.Будут оценены любые указатели.

спасибо

Ответы [ 2 ]

1 голос
/ 29 июня 2010
  1. Создать временную таблицу

    create table #MySp_Categories (
        categoryId int not null primary key
    )
    

    Вставить в нее список категорий и вызвать вашу процедуру (MySp).В MySp присоединяйтесь с #MySp_Categories.После завершения процедуры удалите # MySp_Categories.

    Немного сложный протокол, но работает.

  2. Кодируйте список категорий в виде XML и передайте параметр varchar, содержащий XML, в вашу процедуру.В процедуре используйте OPENXML в вашем запросе.

1 голос
/ 29 июня 2010

Вызовите вашу хранимую процедуру, передав параметры категории в качестве входных параметров.

Внутри SQL-кода процедуры отфильтруйте его:

Select * from Stories where StoryCategoy = category1 OR StoryCategory = category2 и т.д ...

Эта ссылка предоставит вам лучший способ сделать это ...

Передача массивов в хранимые процедуры SQL в C # ASP .NET

О, этот еще лучше:

Передача списков в SQL Server 2005 с параметрами XML

Код для иллюстрации:

DECLARE @categoryIds xml
SET @categoryIds ='<Categories><id>17</id><id>83</id><id>88</id></Categories>'

SELECT
ParamValues.ID.value('.','VARCHAR(20)')
FROM @categoryIds.nodes('/Categories/id') as ParamValues(ID)

Что дает нам следующие три строки:

17
83
88
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...