我是XML(在SQL中)的新手,并被要求创建一个存储过程,该过程将XML字符串传递给另一台服务器上的字段。 我能够使用FOR XML RAW获取XML字符串,但是我获得了包含所有记录的1行,并且无法仅返回单个行数据。 如果我的查询有100行,我需要返回100行结果,现在我得到1行所有记录。 如何才能使XML字符串仅包含行数据而不包括所有行的整个字符串?
SELECT indv_hrn as 'MRN'
FROM Members_rawdata mr (nolock)
inner join Members m (nolock)on mr.memberrecid = m.MemberRecID
inner join Importfile i (nolock)on m.importfileid = i.importfileid
WHERE m.importFileID = 83598 and m.Barcode is not null
FOR XML RAW ('INDEX'),ELEMENTS
答案 0 :(得分:2)
这个答案显示了一种从表行中获取行式XML的方法:
DECLARE @tbl TABLE(col1 INT, col2 DATETIME, col3 VARCHAR(100));
INSERT INTO @tbl VALUES
(1,GETDATE(),'test easy')
,(1,{ts'2016-01-01 23:59:00'},'test with <&> some evil ');
SELECT (SELECT col1,col2,col3 FOR XML PATH('rowData'),TYPE)
FROM @tbl
结果
<rowData><col1>1</col1><col2>2016-04-21T15:35:24.460</col2><col3>test easy</col3></rowData>
<rowData><col1>1</col1><col2>2016-01-01T23:59:00</col2><col3>test with <&> some evil </col3></rowData>
顺便说一下:你到处都在使用NOLOCK
。如果你不知道真的很好!这里发生了什么,你可以阅读这个和附带的链接:NOLOCK HINTS IN REPORT Stored Procedures
答案 1 :(得分:1)
FOR XML
为每个结果集生成一个XML文档。子查询可用于为每行生成单独的XML文档:
SELECT (SELECT indv_hrn AS MRN FOR XML PATH ('INDEX'), TYPE) AS [XML]
FROM Members_rawdata mr (NOLOCK)
INNER JOIN Members m (NOLOCK) ON mr.memberrecid = m.MemberRecID
INNER JOIN Importfile i (NOLOCK) ON m.importfileid = i.importfileid
WHERE m.importFileID = 83598 AND m.Barcode IS NOT NULL