我相信我的問題的標題沒有多大意義。但這是我想要達到的目標。我有不同的故事(列有StoryID,StoryTitle,StoryDesc,StoryCategory),所以每個故事都可以屬於一個類別。例如category1,category2,.... category10。我需要一個SP,在這裏我將類別指定爲參數(多個類別,CSV格式或XML),SP將返回屬於該類別的故事。將多個過濾參數傳遞給存儲的Proc
我不確定在一次SP調用中做到這一點的最佳方式是什麼。任何指針將不勝感激。
謝謝
我相信我的問題的標題沒有多大意義。但這是我想要達到的目標。我有不同的故事(列有StoryID,StoryTitle,StoryDesc,StoryCategory),所以每個故事都可以屬於一個類別。例如category1,category2,.... category10。我需要一個SP,在這裏我將類別指定爲參數(多個類別,CSV格式或XML),SP將返回屬於該類別的故事。將多個過濾參數傳遞給存儲的Proc
我不確定在一次SP調用中做到這一點的最佳方式是什麼。任何指針將不勝感激。
謝謝
調用您的存儲過程傳遞類別參數作爲輸入參數。
裏面的程序的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
創建臨時表
create table #MySp_Categories (
categoryId int not null primary key
)
插入類別列表到它,致電您的程序(MySp
) 。 在MySp
加入#MySp_Categories
。 過程完成後,刪除#MySp_Categories。
稍微複雜的協議,但工程。
將類別列表編碼爲XML,並將包含XML的varchar參數傳遞給您的過程。在程序中,在您的查詢中使用OPENXML。
好吧,我不想傳遞10個參數,如果我需要從10個類別存儲。我需要一些方法來傳遞只有一個參數(一個XML,我指定所有的類別,或CSV) – Joe 2010-06-28 21:51:17
很酷的感謝,這將有所幫助。 – Joe 2010-06-28 22:04:36
@Joe:如果你知道你需要傳遞一個XML,什麼阻止你?只需傳遞它並在查詢中使用OPENXML即可。 – 2010-06-28 22:05:01