如何在循环中为多个插入存储过程迭代sql TVP值

时间:2015-05-21 13:48:11

标签: sql-server stored-procedures iteration table-valued-parameters

我处于需要在一个存储过程中插入多个记录的情况。

我使用“表值参数”,来自c#代码并将其传递给存储过程。 (这个TVP有一个分析ID列表)

所以,我正在尝试创建一个循环;插入多个记录并迭代直到@TVP行的最大行数。

如何获取SP中传递的TVP(表值参数)的行大小并迭代这些TVP行以逐个获取它们的tvp.id,以进行多次插入?

SP是这样的:

create proc insertTable
(
   @nID int,
   @TVP Analises READONLY
)
as
declare @i int
BEGIN
   While @i <--max rownumber of @TVP
   BEGIN
     --insert into tbl_insertAnalyses
     --values(@nID,@tvp.analiseID[i]) -- >need to iterate here
   END
END

感谢。

1 个答案:

答案 0 :(得分:2)

表值参数(TVP)是表变量。你可以做一个简单的INSERT...SELECT

CREATE PROCEDURE insertTable
(
   @nID int,
   @TVP Analises READONLY
)
AS
SET NOCOUNT ON;

INSERT INTO tbl_insertAnalyses (ID, AnalysisID)
   SELECT @nID, t.analiseID
   FROM   @TVP t;