将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(1000)=‘<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‘,1)
       WITH
       (
         FromCurrencyCode char(3),
         ToCurrencyCode char(3)
       )

注意变量必须定义为@XMLDocHandle变量

执行效果如下

3 xml作为存储过程的参数示例

--将xml作为存储过程的输入参数
create procedure getCurrentRatesXML
@XMLList varchar(1000),
@CurrencyRateDate datetime

AS
declare @XMLDocHandle int
declare @CurrencyCodeTable table
(
  FromCurrencyCode char(3),
  ToCurrencyCode char(3)
)

--准备xml文档
execute sp_xml_preparedocument @XMLDocHandle output,@XMLList;

INSERT INTO @CurrencyCodeTable(FromCurrencyCode,ToCurrencyCode)
SELECT FromCurrencyCode,ToCurrencyCode
FROM OPENXML(@XMLDocHandle,‘/ROOT/CurrencyList‘,1)
       WITH
       (
         FromCurrencyCode char(3),
         ToCurrencyCode char(3)
       );

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
时间: 2024-11-04 09:17:57

将xml作为输入参数传递给存储过程的相关文章

XML中输入特殊符号

XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η Η Η Θ Θ Θ Ι Ι Ι Κ Κ Κ Λ Λ Λ Μ Μ Μ Ν Ν Ν Ξ Ξ Ξ Ο Ο Ο Π Π Π Ρ Ρ Ρ Σ Σ Σ Τ Τ Τ Υ Υ Υ Φ Φ Φ Χ Χ Χ Ψ Ψ Ψ Ω Ω Ω α

android ksoap2 中把XML(DataSet) 当做参数传递

我的android app中需要发送webservice ,于是我使用了 ksop2 进行发送,在测试过程中不是很顺利,不能正常工作. 我的web service 请求格式如下 <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <UpdateVehicleViaObj xmlns="http://tempuri.org/"> <userHa

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

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

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

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是最强大的元素,用来描述

c#中如何执行存储过程

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace 使用

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.

c#调用存储过程实现批量增加和修改数据

1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新的数据构建成一个datatable,例如我数据库中的表结构是这样 CREATE TABLE [dbo].[FlagDescription]( [FundId] [CHAR(10)] not null, [SurveyType] [tinyint] not null, [DefectReason] T

mybatis 存储过程

MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所以具备性能高,可重复使用的特性.它定义了3种类型的参数:输入参数.输出参数.输入输出参数. •输入参数,是外界给的存储过程参数,在Java互联网中,也就是互联网系统给它的参数. •输出参数,是存储过程经过计算返回给程序的结果参数. •输入输出参数,是一开始作为参数传递给存储过程,而存储过程修改后将其

mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11) begin select count(*) into counts from student where grade = gradename