将xml作为输入参数传递给存储过程
1 查看存储过程的方式
exec sp_helptext 'GetTrackingFeedLogByMaxId' select definition from sys.sql_modules
where object_id=(OBJECT_ID(N'GetTrackingFeedLogByMaxId'))
2 在调用有输入参数的存储过程时必须包含参数,除非参数有默认值
3 系统存储过程sp_xml_preparedocument和OPENXML函数来操作传入的xml文档
DECLARE @XMLDocHandle int declare @xml varchar()='<ROOT>
<CurrencyList FromCurrencyCode="USD" ToCurrencyCode="AUD"></CurrencyList>
<CurrencyList FromCurrencyCode="USD" ToCurrencyCode="EUR"></CurrencyList>
<CurrencyList FromCurrencyCode="USD" ToCurrencyCode="GBP"></CurrencyList>
<CurrencyList FromCurrencyCode="USD" ToCurrencyCode="MXN"></CurrencyList>
</ROOT>
' execute sp_xml_preparedocument @XMLDocHandle output,@xml SELECT FromCurrencyCode,ToCurrencyCode
FROM OPENXML(@XMLDocHandle,'/ROOT/CurrencyList',)
WITH
(
FromCurrencyCode char(),
ToCurrencyCode char()
)
注意变量必须定义为@XMLDocHandle变量
执行效果如下
3 xml作为存储过程的参数示例
--将xml作为存储过程的输入参数
create procedure getCurrentRatesXML
@XMLList varchar(),
@CurrencyRateDate datetime AS
declare @XMLDocHandle int
declare @CurrencyCodeTable table
(
FromCurrencyCode char(),
ToCurrencyCode char()
) --准备xml文档
execute sp_xml_preparedocument @XMLDocHandle output,@XMLList; INSERT INTO @CurrencyCodeTable(FromCurrencyCode,ToCurrencyCode)
SELECT FromCurrencyCode,ToCurrencyCode
FROM OPENXML(@XMLDocHandle,'/ROOT/CurrencyList',)
WITH
(
FromCurrencyCode char(),
ToCurrencyCode char()
); SELECT *
FROM Sales.CurrencyRate cr
JOIN @CurrencyCodeTable TVP
ON cr.FromCurrencyCode=TVP.FromCurrencyCode
AND cr.ToCurrencyCode=TVP.ToCurrencyCode
WHERE CurrencyRateDate=@CurrencyRateDate; --移除文档
execute sp_xml_removedocument @XMLDocHandle;
go
将xml作为输入参数传递给存储过程的更多相关文章
- XML中输入特殊符号
XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...
- 使用动态SQL处理table_name作为输入参数的存储过程(MySQL)
关于mysql如何创建和使用存储过程,参考笔记<MySQL存储过程和函数创建>以及官网:https://dev.mysql.com/doc/refman/5.7/en/create-pro ...
- 通过Web API调用Action时各种类型输入参数传递值的方法
本人微信公众号:微软动态CRM专家罗勇 ,回复280或者20180906可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...
- oracle执行带输入输入参数的存储过程
declare a1 ); a2 ); begin PKG_INPATIENT.prc_autojf('Y', a1, a2); end;
- SQL Server :Stored procedures存储过程初级篇
对于SQL Server,我是个拿来主义.很多底层的原理并不了解,就直接模仿拿着来用了,到了报错的时候,才去找原因进而逐步深入底层.我想,是每一次的报错,逼着我一点点进步的吧. 近期由于项目的原因,我 ...
- 笔记:MyBatis Mapper XML文件详解 - 映射和参数
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- c#中如何执行存储过程
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- SQL Server XML数据解析
--5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...
- ORACLE——存储过程
存储过程procedure 被内容来自<oracle从入门到精通——明日科技>一书 存储过程是一种命名的PL/SQL程序快,存储过程被保存在数据库中,它不可以被SQL语句直接执行或调用,只 ...
随机推荐
- Hibernate3疑惑解决
1.session的get()和load()有什么区别? # get()如果没有找到持久化类返回null,有可能导致空指针异常. # load()如果没有找到持久化类直接抛出异常. ...
- VBA读写XML文件
'Write XML file Sub WriteXML(fpa$, fn$) Dim xmlfile As String xmlfile = ThisWorkbook.Path & &quo ...
- selenium 常见事件操作
1.文本框输入内容 from selenium import webdriverdriver = webdriver.Chrome(r"C:\Users\Administrator\Desk ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
笔记 4.自定义Zuul过滤器实现登录鉴权实战 简介:自定义Zuul过滤器实现登录鉴权实战 1.新建一个filter包 2.新建一个类,实现ZuulFilter,重写里面的方法 3.在类顶部加 ...
- 分布式存储ceph--添加/删除osd(5)
一.添加osd: 当前ceph集群中有如下osd,现在准备新添加osd:
- ES6拓展符修改对象
// ES6 拓展符合并两个对象let ab = { ...a, ...b }; // 等同于 let ab = Object.assign({}, a, b); // 修改对象部分属性.用户自定义的 ...
- 5.Linux文件权限
Linux用户类别 root:这是系统特权用户类,他们都有访问root登录账号的权限 owner:这是实际拥有文件的用户 group:这是共享文件的组访问权的用户类的用户组名称 world:这是不属于 ...
- iclass 鎖機鎖程序破解限制方法-適合于有用google login 的App
此法適合于有用google login 的App,只需要去到 app login 界面, 找到 “log in with google” , 然後向下滾動,找到最下面的 “説明” ,點擊進去,就會見到 ...
- windows端口映射
1. 查看netsh interface portproxy show all 2. 添加端口映射转发netsh interface portproxy add v4tov4 listenaddres ...
- ParallelForTransform作业
ParallelForTransform作业是另一种ParallelFor作业 ; 专为在变形上操作而设计. 注意:ParallelForTransform作业是Unity中用于实现IJobParal ...