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作为输入参数传递给存储过程的更多相关文章

  1. XML中输入特殊符号

    XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...

  2. 使用动态SQL处理table_name作为输入参数的存储过程(MySQL)

    关于mysql如何创建和使用存储过程,参考笔记<MySQL存储过程和函数创建>以及官网:https://dev.mysql.com/doc/refman/5.7/en/create-pro ...

  3. 通过Web API调用Action时各种类型输入参数传递值的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复280或者20180906可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...

  4. oracle执行带输入输入参数的存储过程

    declare a1 ); a2 ); begin PKG_INPATIENT.prc_autojf('Y', a1, a2); end;

  5. SQL Server :Stored procedures存储过程初级篇

    对于SQL Server,我是个拿来主义.很多底层的原理并不了解,就直接模仿拿着来用了,到了报错的时候,才去找原因进而逐步深入底层.我想,是每一次的报错,逼着我一点点进步的吧. 近期由于项目的原因,我 ...

  6. 笔记:MyBatis Mapper XML文件详解 - 映射和参数

    MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...

  7. c#中如何执行存储过程

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. SQL Server XML数据解析

    --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...

  9. ORACLE——存储过程

    存储过程procedure 被内容来自<oracle从入门到精通——明日科技>一书 存储过程是一种命名的PL/SQL程序快,存储过程被保存在数据库中,它不可以被SQL语句直接执行或调用,只 ...

随机推荐

  1. 代码bug管理工具bugfree与禅道

    禅道官网有一键安装包,一键安装即可用 bugfree 搭建lnmp环境   详情参考zabbix 解压bugfree包 到nginx的html里 unzip bugfree3.0.4.zip mv b ...

  2. 007-Linux 查看端口

    1.使用ss 查看 ss 一般用于转储套接字统计信息.它还可以显示所有类型的套接字统计信息,包括 PACKET.TCP.UDP.DCCP.RAW.Unix 域等. ss -lntpd | grep : ...

  3. 008-centos6.5搭建web服务【nginx-tomcat8-jre8】

    一.机器配置 yum install vim 1.1.Linux最大进程以及打开文件数 ulimit -n和-u可以查看linux的最大进程数和最大文件打开数. ulimit -a 展示所有 临时方法 ...

  4. vue组件命名和传值 and 父子组件传值

    https://www.cnblogs.com/lianxisheng/p/10907350.html

  5. C# AES的128位、192位、256位加密

    C# AES的128位.192位.256位加密   AES加密原理,这里就不解释了,自行百度.这里主要细说AES的CBC加密模式下的128位.192位.256位加密区别,参考 对称加密和分组加密中的四 ...

  6. freeRTOS学习8-21

    不能再中断服务程序调用该函数 应该调用xQueueSendFromISR()

  7. 性能排查--CPU占用高

    排查思路: 1.先找到占用CPU高的进程PID    top命令 2.top -H -p <PID>  查看哪个占用CPU高的线程TID 3.jstack <PID>  /ho ...

  8. JAVA实验报告及第八周总结

    JAVA第八周作业 实验报告六 实验一 编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常.在ca ...

  9. SecureCRT设置 log file

    SecureCRT设置 log filelog file name:D:\1-SecureCRT-log\com-6\%S_%Y%M%D_%h.log on each line:[%Y%M%D_%h: ...

  10. gdb移植(交叉版本)

    Gdb下载地址: http://ftp.gnu.org/gnu/gdb/ termcap下载地址:http://ftp.gnu.org/gnu/termcap/tar -zxvf termcap-1. ...