接下来function
我写了哪个接受xml
并table
作为结果返回。
CREATE FUNCTION FunctionTest(@ID INT,@XML_Details xml)
RETURNS @RESULT TABLE
(
Value1 INT,
Value2 INT
)
AS
BEGIN
DECLARE @tbl_Xml_Result Table
(
Value1 INT,
Value2 INT
)
INSERT INTO @RESULT(Value1,Value2)
SELECT
l.v.value('Value2[1]','INT'),
l.v.value('Value1[1]','INT')
FROM @XML_Details.nodes('/Listings/listing')l(v)
RETURN
END
以下是我用来在上面运行的代码,function
但它总是返回Empty
结果。
DECLARE @tbl_Xml_Result Table
(
Value1 INT,
Value2 INT
)
INSERT INTO @tbl_xml_Result
values(1,2),(2,3),(3,4),(4,5),(5,6)
DECLARE @xml_Temp xml
SET @xml_Temp = ( SELECT *
FROM @tbl_xml_Result
FOR XML PATH('Listing'),ROOT('Listings')
)
DELETE FROM @tbl_xml_Result
INSERT INTO @tbl_xml_Result(Value1,Value2)
Select
T.Value1,
T.Value2
FROM FunctionTest(1,@xml_Temp) T
select * from @tbl_Xml_Result
XQuery 是区分大小写的,在处理 XML 时通常也是如此。更正您的函数以具有大写
Listing
元素,它将起作用。我注意到您也传入@ID
但不使用它并且不小心交换了您的Value1
和Value2
列。在读取无类型 XML 以提高性能时,您还应该始终使用text()
访问器,如下面的示例所示。这对我有用:
我的结果:
顺便说一句,您的函数非常简单,可以成为内联表值函数而不是多行函数。内联 TVF 通常表现更好。如果您想了解更多信息,请回复。
高温高压