在存储过程中以用户定义的表类型进行每条记录

时间:2018-10-18 13:47:44

标签: sql sql-server

:)

我有这个定义的类型:

CREATE TYPE dbo.MyType
AS TABLE
(
name varchar(255),
value varchar(255)
);

具有此存储过程:

CREATE PROCEDURE MyProcedure @docName varchar(255), @docPath varchar(255), @values AS [dbo].MyType Readonly
AS

declare @ID table (ID int)

INSERT INTO MyTable output inserted.fileID into @ID values (@docName,@docPath)

-- insert loop here

GO;

以及下面的“一对多”表

CREATE TABLE TableN (
fileID int PRIMARY KEY,
name varchar(255),
value varchar(255)
)

我如何在上面的代码中指出的地方进行循环,以便将MyType表中的每个记录与{{1}中的fileID一起插入到TableN中}?

谢谢!

1 个答案:

答案 0 :(得分:2)

不需要循环(您需要停止在SQL中以编程方式进行思考,而在数据集中进行思考)。只需执行INSERT

INSERT INTO TableN (FileID,[name],[value])
SELECT ID.ID,
       V.[Name],
       V.[value]
FROM @values v
     CROSS JOIN @ID ID;