将多个过滤参数传递给存储过程

时间:2010-06-28 21:27:08

标签: sql sql-server-2008 stored-procedures

我确信我的问题标题没有多大意义。但这就是我想要实现的目标。我有不同故事的表(列是StoryID,StoryTitle,StoryDe​​sc,StoryCategory),因此每个故事都属于一个类别。例如category1,category2,.... category10。我需要一个SP,我将类别指定为参数(多个类别,CSV格式或XML),SP将返回属于这些类别的故事。

我不确定在一次SP通话中执行此操作的最佳方法是什么。任何指针都将受到赞赏。

谢谢

2 个答案:

答案 0 :(得分:1)

调用存储过程,将Categories参数作为输入参数传递。

在程序的SQL代码中,用以下内容对其进行过滤:

Select * from Stories where StoryCategoy = category1 OR StoryCategory = category2等等......

此链接将为您提供更好的方法...

Passing Arrays to SQL Stored Procedures in C# ASP .NET

哦,这个更好了:

Passing lists to SQL Server 2005 with XML Parameters

一些代码要说明:

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

答案 1 :(得分:1)

  1. 创建临时表

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

    在其中插入类别列表并调用您的程序(MySp)。 在MySp加入#MySp_Categories。 程序结束后删除#MySp_Categories。

    协议稍微复杂,但有效。

  2. 将类别列表编码为XML,并将包含XML的varchar参数传递给您的过程。在程序中使用查询中的OPENXML