用xml字符作为参数(存储过程)

本文介绍了一个使用 SQL 的过程 SP_RPT_AP_BILLING_SUMMARY,该过程接收 XML 格式的参数,并通过 OPENXML 函数解析这些参数来查询 TMS_FREIGHT 和相关联表中的数据。此外,还演示了如何使用 sp_xml_preparedocument 和 OPENXML 处理 XML 数据。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SP_RPT_AP_BILLING_SUMMARY]
@TMS_FREIGHT_IDS varchar(8000) ---FREIGHT_ID

WITH
EXECUTE AS CALLER
AS

BEGIN

declare @idoc int

exec sp_xml_preparedocument @idoc output,@TMS_FREIGHT_IDS

SELECT TMS_FREIGHT_ID,FREIGHT_SOURCE
INTO #TMP_FRT
FROM TMS_FREIGHT
WHERE TMS_FREIGHT_ID IN(
select FRT_ID
from openxml(@idoc,'/ROOT/FRT',2)
with
(
FRT_ID varchar(50) 'FRT_ID'
)
)

exec sp_xml_removedocument @idoc


SELECT
F.TMS_FREIGHT_ID FRT_ID,
A.ATTEMPER_NO ATTEMPER_NO,
J.JOB_NO JOB_NO,
O.ORDER_NO ORDER_NO,
dbo.FN_GET_PERIOD (F.CREATED_DTM_LOC) FILE_PERIOD,
O.ORI_STATION ORI_STATION,
O.DEST_STATION DEST_STATION,
F.CREATED_OFFICE COST_INPUT_STATION,
F.BILLING_STATION PL_STATION,
F.CREATED_BY_USER CREATE_ID,
O.FINALLY_CARGO_PACKAGES QUANTITY,
O.FINALLY_CARGO_WEIGHT WEIGHT,
O.FINALLY_CARGO_CUBE CMB,
F.FRT_CODE ACE_CODE,
F.CURRENCY CUR,
F.EXCHANGE_RATE EXCHANGE_RATE,
F.UNIT_PRICE UNIT_PRICE
FROM TMS_FREIGHT F
LEFT JOIN TMS_ORDER O ON F.TMS_ORDER_ID = O.TMS_ORDER_ID
LEFT JOIN TMS_ATTEMPER A ON F.TMS_ATTEMPER_ID = A.TMS_ATTEMPER_ID
LEFT JOIN TMS_JOB J ON F.TMS_JOB_ID = J.TMS_JOB_ID
WHERE RP_IND=1
AND TMS_FREIGHT_ID IN(
SELECT TMS_FREIGHT_ID
FROM #TMP_FRT
WHERE FREIGHT_SOURCE IN ('BK','JOB')
) OR SHARE_FREIGHT_SOURCE_ID IN(
SELECT TMS_FREIGHT_ID
FROM #TMP_FRT
WHERE FREIGHT_SOURCE NOT IN ('BK','JOB')
)
ORDER BY F.BILLING_STATION


END



传入的参数格式如下:

<ROOT>
<FRT><FRT_ID>1231232</FRT_ID></FRT>
<FRT><FRT_ID>1231233</FRT_ID></FRT>
<FRT><FRT_ID>1231234</FRT_ID></FRT>
</ROOT>



xml操作测试



declare @xml varchar(1000)
set @xml = '<ArchiveMsg Title="jiangsuer" UserID="Admin1" Author="123" SendTime="1/1/2001" Department="mse"
AttachFile="hust" ReceiveList="younther" Body="hustwelcome">
<MsgKK>123123</MsgKK>
<MsgList UserID="Admin"/>
<MsgList UserID="Anime"/>
<MsgList UserID="Tiger"/>
</ArchiveMsg> '

declare @idoc int

EXEC sp_xml_preparedocument @idoc output, @xml

SELECT Title,UserID,Author,SendTime,Department,ReceiveList,Body,AttachFile,MsgKK
FROM OpenXML(@idoc, '/ArchiveMsg')
WITH (
Title varchar(50),
UserID varchar(50),
Author varchar(50),
SendTime DATETIME,
Department varchar(50),
ReceiveList varchar(50),
Body varchar(50),
AttachFile varchar(50),
MsgKK varchar(50) 'MsgKK'
)

select MsgKK
from openxml(@idoc, '/ArchiveMsg')
with(
MsgKK varchar(50) 'MsgKK'
)
SELECT '',UserID,''
FROM OpenXML(@idoc, '/ArchiveMsg/MsgList')
WITH (
MsgID int,
UserID varchar(80),
SendTime datetime
)
EXEC sp_xml_removedocument @idoc


结果:


[img]http://dl.iteye.com/upload/attachment/220453/9f5454d5-4882-3832-ad89-e5ee1b25d3f3.jpg[/img]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值