如何将数组参数传递给存储过程?

时间:2014-02-05 08:13:13

标签: c# sql-server-2008 tsql

我有这些表:
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 个答案:

答案 0 :(得分:1)

从C#开始,您需要使用值创建DataTable并将其传递给存储过程。请参阅此SO Post.您还可以将值作为分隔字符串传递给存储过程,并使用TSQL中的函数将值转换为表。有关示例,请参阅此post