2014-02-05 109 views
1

我有這些表:
enter image description here
我有一個像cat1,cat2,cat3,cat4那樣想傳遞給sql server存儲過程的數組。
然後檢查它們是否存在於PaperKeywors的表中。 如果是,則插入PKeyID主題和PID(例如PID = 1)至PaperTag,如果沒有返回它們。
我知道我必須使用TVP,並寫在SQL代碼這些:如何將數組參數傳遞給存儲過程?

CREATE TYPE PaperKeywordsType AS TABLE 
     (PKeyword nvarchar(200) ,PKeyID int ) 

和:

Create PROCEDURE [dbo].[InsertPaperTag] 
    (@dt AS PaperKeywordsType READONLY , @PID int) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT dbo.PaperTags(PID,PKeyID) 
    SELECT @PID,PaperKeywords.PKeyID FROM @dt tvp 
    inner join PaperKeywords on PaperKeywords.PKeyword = tvp.PKeyword 
END 


但它不是爲我工作。爲什麼?

回答

1

從C#你需要創建一個DataTable與值並將其傳遞給存儲過程。看到這個SO Post.您也可以將值作爲分隔字符串傳遞給存儲過程,並使用TSQL中的函數將值轉換爲表。幾個例子見post

相關問題