接下来,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
首先,尽可能避免使用多行功能。内联UDF具有更好的性能。
其次XQuery
是区分大小写的,您没有'/Listings/listing'
路径。
第三:您可能想使用过滤@ID
。
CREATE FUNCTION FunctionTest(@ID INT,@XML_Details xml)
RETURNS TABLE
AS
RETURN(
SELECT Value1, Value2
FROM (SELECT
l.v.value('(Value2)[1]','INT') AS Value2,
l.v.value('(Value1)[1]','INT') AS Value1
FROM @XML_Details.nodes('/Listings/Listing')l(v)) AS sub
WHERE Value1 = @ID
)
GO
DECLARE @tbl_Xml_Result Table(Value1 INT,Value2 INT);
INSERT INTO @tbl_xml_Result(Value1, Value2)
values(1,2),(2,3),(3,4),(4,5),(5,6);
DECLARE @xml_Temp xml = (SELECT *
FROM @tbl_xml_Result
FOR XML PATH('Listing'),ROOT('Listings'));
SELECT T.Value1,
T.Value2
FROM FunctionTest(1,@xml_Temp) T;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句