我正在处理存储过程并尝试思考这个场景。
我允许用户选择PK
ID
crossjoin
的多个文档。然后,他们可以从列表中选择多个名称以分配给这些文档。
我正在试图弄清楚如何说出"为这些文件中的每一个插入此人员列表"。
我尝试为两个数据集创建临时表,然后使用-- Create a temp tables to hold our data
DECLARE @documents AS TABLE(documentID INT)
DECLARE @users AS TABLE(UID VARCHAR(10), contactType VARCHAR(50))
-- Insert our documents
INSERT INTO @documents( documentID )
SELECT ParamValues.x1.value('docID[1]', 'INT')
FROM @xml.nodes('/root/data/documents/document') AS ParamValues(x1);
-- Insert our users
INSERT INTO @users( UID, contactType )
SELECT ParamValues.x1.value('UID[1]', 'varchar(10)'),
ParamValues.x1.value('contactType[1]', 'varchar(50)')
FROM @xml.nodes('/root/data/users/user') AS ParamValues(x1)
-- Do we user contact data to insert?
IF EXISTS (SELECT * FROM @users)
BEGIN
-- Insert our users
INSERT INTO dbo.DocumentContacts ( documentID, UID, contactLevel )
SELECT documentID,
u.UID,
u.contactType
FROM @documents
CROSS JOIN @users AS u
END
,但只插入了一个集合,所以我假设我做错了。
FK
发送的数据是一个XML字符串,这些ID被放入临时表中。
由于用户和文档之间没有dbo.DocumentContacts
,我还能如何加入这些数据?
示例:
对于每个文档ID,最终结果应该将记录插入到我的表{{1}}中,如下所示:
.....