2014-02-05 116 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

相关问题