2010-06-28 73 views
1

我相信我的問題的標題沒有多大意義。但這是我想要達到的目標。我有不同的故事(列有StoryID,StoryTitle,StoryDe​​sc,StoryCategory),所以每個故事都可以屬於一個類別。例如category1,category2,.... category10。我需要一個SP,在這裏我將類別指定爲參數(多個類別,CSV格式或XML),SP將返回屬於該類別的故事。將多個過濾參數傳遞給存儲的Proc

我不確定在一次SP調用中做到這一點的最佳方式是什麼。任何指針將不勝感激。

謝謝

回答

1

調用您的存儲過程傳遞類別參數作爲輸入參數。

裏面的程序的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

一些代碼來ilustrate:

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 
+0

好吧,我不想傳遞10個參數,如果我需要從10個類別存儲。我需要一些方法來傳遞只有一個參數(一個XML,我指定所有的類別,或CSV) – Joe 2010-06-28 21:51:17

+0

很酷的感謝,這將有所幫助。 – Joe 2010-06-28 22:04:36

+0

@Joe:如果你知道你需要傳遞一個XML,什麼阻止你?只需傳遞它並在查詢中使用OPENXML即可。 – 2010-06-28 22:05:01

1
  1. 創建臨時表

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

    插入類別列表到它,致電您的程序(MySp) 。 在MySp加入#MySp_Categories。 過程完成後,刪除#MySp_Categories。

    稍微複雜的協議,但工程。

  2. 將類別列表編碼爲XML,並將包含XML的varchar參數傳遞給您的過程。在程序中,在您的查詢中使用OPENXML

相關問題