2
这是一个更大的存储过程的一部分,但在开始工作之前,我必须先解析XML,提取属性并将它们插入临时表中。然后,我将在稍后使用该表执行功能。子查询从XML中插入返回多个值
当我尝试插入临时表时,我得到“子查询返回多个值”。如果我的虚拟XML包含一个节点,它工作正常,但如果我添加其他节点问题出现。
完整的SQL包括XML测试:
DECLARE @MESSAGELIST XML
set @MESSAGELIST =
'<object>
<Record FirstName = ''Red'' LastName = ''Shark'' Email = ''[email protected]'' Date = ''01/01/2001'' ></Record>
<Record FirstName = ''Jon'' LastName = ''Slow'' Email = ''[email protected]'' Date = ''01/01/2011'' ></Record>
<Record FirstName = ''Tyrone'' LastName = ''Lennystar'' Email = ''[email protected]'' Date = ''01/11/2011'' ></Record>
</object>'
IF (OBJECT_ID('tempdb..#NHOMessagesTemp') IS NOT NULL)
DROP TABLE #NHOMessagesTemp
CREATE TABLE #NHOMessagesTemp
(
FirstName nvarchar(50),
LastName nvarchar(50),
Email nvarchar(100),
MessageDate datetime
)
INSERT INTO #NHOMessagesTemp
VALUES (
(SELECT I.FirstName.value('@FirstName', 'nvarchar(50)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(FirstName)),
(SELECT I.LastName.value('@LastName', 'nvarchar(50)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(LastName)),
(SELECT I.Email.value('@Email', 'nvarchar(100)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(Email)),
(SELECT I.[Date].value('@Date', 'datetime')
FROM @MESSAGELIST.nodes('/object/Record') AS I([Date]))
)
SELECT *
FROM #NHOMessagesTemp
我相信这个问题是我
FROM @MESSAGELIST.nodes('/object/Record') AS...
,但我不知道通过XML如何循环并获得所有的值。
谢谢你的帮助!
而不是使用'VALUES'插入,为什么不您是否使用常规选择语句?例如'SELECT Value('@ FirstName','nvarchar(50)')FirstName,ABvalue('@ LastName','nvarchar(50)')LastName,ABvalue('@ Email','nvarchar(100)' )Email,ABvalue('@ Date','datetime')[Date] FROM @ MESSAGELIST.nodes('/ object/Record')A(B)' – ZLK
@ZLK应该是我认为的答案...并且这里是OP的一个相关问题:[SQL插入...值(SELECT ... FROM ...)](http://stackoverflow.com/questions/25969/sql-insert-into-values-select-from) – har07
@ZLK即正是我最终做的,我看到了marc_s在你之前的回应。我基于以前的经验使用“值”关键字。谢谢您的意见! – DMcC