如何将xml输入参数分解为表变量
我正在接受一个xml类型的输入参数,这样我就可以接受一个事务上的保险计划列表。我需要获取xml参数并将其分解为一个tale变量,以便处理一些逻辑。如何将XML分解到表变量中 下面是一个脚本,用于创建包含数据的示例表如何将xml输入参数分解为表变量,xml,sql-server-2005,Xml,Sql Server 2005,我正在接受一个xml类型的输入参数,这样我就可以接受一个事务上的保险计划列表。我需要获取xml参数并将其分解为一个tale变量,以便处理一些逻辑。如何将XML分解到表变量中 下面是一个脚本,用于创建包含数据的示例表 /* CREATE TABLE PlanData(PlanPos INT IDENTITY, PayerDX INT, PlanDX INT, PayPct DECIMAL(6,2)) INSERT PlanData(PayerDX, PlanDX, PayPct) VALUES(
/*
CREATE TABLE PlanData(PlanPos INT IDENTITY, PayerDX INT, PlanDX INT, PayPct DECIMAL(6,2))
INSERT PlanData(PayerDX, PlanDX, PayPct)
VALUES(10, 20, 80)
INSERT PlanData(PayerDX, PlanDX, PayPct)
VALUES(25, 50, 10)
drop table PlanData
*/
DECLARE @xmlPlans XML
SET @xmlPlans = (SELECT PlanPos, PayerDX, PlanDX, PayPct
FROM PlanData
ORDER BY PlanPos
FOR XML RAW('plan'), ROOT('plans')
)
print CAST(@xmlPlans AS NVARCHAR(max))
/* We must convert the XML passed in containing all of the insurance payer plan
data into a usable format for the current scoping. */
DECLARE @tblPlans TABLE(PlanPos INT, IPDX INT, IPPDX INT, PayPct decimal(6, 2))
-- /* Note that the table is built in order from Primary through the last plan */
-- INSERT @tblPlans (PlanPos, IPDX, IPPDX, PayPct)
-- SELECT x.item.value('@PlanPos[1]', 'INT') AS PlanPos,
-- x.item.VALUE('@IPDX[1]', 'INT') AS IPDX,
-- x.item.VALUE('@IPPDX[1]', 'INT') AS IPPDX,
-- x.item.VALUE('@PayPct[1]', 'decimal(6, 2)') AS PayPct
-- FROM @xmlPlans.nodes('//items/item') AS x(item)
INSERT @tblPlans (PlanPos, IPDX, IPPDX, PayPct)
SELECT T.plann.value('@PlanPos', 'int') AS PlanPos
,T.plann.VALUE('@PayerDX', 'INT') AS IPDX
,T.plann.VALUE('@PlanDX', 'INT') AS IPPDX
,T.plann.VALUE('@PayPct', 'decimal(6, 2)') AS PayPct
FROM @xmlPlans.nodes('plans/plan') as T(plann)
---- Attribute-centered XML
--DECLARE @data XML
--SET @data = '<data><customer id="1" name="Allied Industries"/><customer id="2" name="Trades International"/></data>';
--
--DECLARE @tblCust TABLE(id INT, [name] VARCHAR(20))
--
--
---- Using the value() method
--INSERT @tblCust (id, [name])
--SELECT T.customer.value('@id', 'INT') AS customer_id,
-- T.customer.value('@name', 'VARCHAR(20)') AS customer_name
--FROM @data.nodes('data/customer') AS T(customer);
--
--SELECT id AS dx, name AS CustName FROM @tblCust
-- SELECT x.item.value('@PlanPos[1]', 'INT') AS PlanPos,
-- x.item.VALUE('@IPDX[1]', 'INT') AS IPDX,
-- x.item.VALUE('@IPPDX[1]', 'INT') AS IPPDX,
-- x.item.VALUE('@PayPct[1]', 'decimal(6, 2)') AS PayPct
-- FROM @xmlPlans.nodes('//items/item') AS x
SELECT
p.PlanPos AS PlanPos,
p.IPDX AS IPDX,
p.IPPDX AS IPPDX,
p.PayPct AS PayPct
FROM @tblPlans p
你也会看到我的尝试失败了
谢谢,
Brian好的,我尝试了您的表,从FOR XML RAW中获得了以下输出。。。。。声明:
<plans>
<plan PlanPos="1" PayerDX="10" PlanDX="20" PayPct="80.00" />
<plan PlanPos="2" PayerDX="25" PlanDX="50" PayPct="10.00" />
</plans>
我从中得到这个输出:
PlanPos IPDX IPPDX PayPct
1 10 20 80.00
2 25 50 10.00
或者您真正想要的是什么???如果您发布代码或XML,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮101 010,以很好地格式化和语法突出显示它!不,你明白了!非常感谢你,哈哈!除此之外的另一个问题是我有值而没有值……啊,是的,那些XQuery函数确实区分大小写!
PlanPos IPDX IPPDX PayPct
1 10 20 80.00
2 25 50 10.00