存储过程:

CREATE PROCEDURE [dbo].[UP_PurchasexxxCard]
@OrderInfo XML
AS
BEGIN

SET NOCOUNT ON;
DECLARE @DateNow Datetime;

DECLARE @OrderNumber BIGINT;--订单编号
DECLARE @CustomerID INT;--用户编号
DECLARE @Amount DECIMAL(18,2);--订单金额
DECLARE @PaymentMethodCode VARCHAR(4);--支付方式
DECLARE @Memo nvarchar(max);--用户备注
DECLARE @CardType nvarchar(50);--用户证件类型
DECLARE @CardNo nvarchar(50);--用户证件编号
DECLARE @ShippingAreaId varchar(10);--收货地址编号
DECLARE @ShippingContactWith nvarchar(60);--收货人姓名
DECLARE @ShippingAddress nvarchar(400);--收货人地址
DECLARE @CellPhone nvarchar(20);--收货人手机号
DECLARE @Phone nvarchar(20);--电话
DECLARE @Fax nvarchar(20);--传真
DECLARE @Zip nvarchar(20);--邮编
DECLARE @StoreId varchar(20);--实体店编号
DECLARE @DeliverDate Datetime;--取货时间
DECLARE @NeedInvoice int;
DECLARE @InvoiceType nvarchar(50);--发票类型
DECLARE @InvoiceTitle nvarchar(200);--发票抬头
DECLARE @TakeCardDate Datetime;--实际取货时间
DECLARE @InUserId int;
DECLARE @InDate Datetime;
DECLARE @EditUserId int;
DECLARE @EditDate Datetime;

SELECT
@OrderNumber = @OrderInfo.value('(/xxxCardOrderInfo//OrderNumber/node())[1]', 'BIGINT'),
@CustomerID = @OrderInfo.value('(/xxxCardOrderInfo//CustomerId/node())[1]', 'INT'),
@Amount = @OrderInfo.value('(/xxxCardOrderInfo//Amount/node())[1]', 'DECIMAL(18,2)'),
@PaymentMethodCode = @OrderInfo.value('(/xxxCardOrderInfo//PaymentMethodCode/node())[1]', 'VARCHAR(4)'),
@Memo = @OrderInfo.value('(/xxxCardOrderInfo//Memo/node())[1]', 'NVARCHAR(MAX)'),
@CardType = @OrderInfo.value('(/xxxCardOrderInfo//CardType/node())[1]', 'nvarchar(50)'),
@CardNo = @OrderInfo.value('(/xxxCardOrderInfo//CardNo/node())[1]', 'nvarchar(50)'),
@ShippingAreaId = @OrderInfo.value('(/xxxCardOrderInfo//ShippingAreaId/node())[1]', 'varchar(10)'),
@ShippingContactWith = @OrderInfo.value('(/xxxCardOrderInfo//ShippingContactWith/node())[1]', 'nvarchar(60)'),
@ShippingAddress = @OrderInfo.value('(/xxxCardOrderInfo//ShippingAddress/node())[1]', 'nvarchar(400)'),
@CellPhone = @OrderInfo.value('(/xxxCardOrderInfo//CellPhone/node())[1]', 'nvarchar(20)'),
@Phone = @OrderInfo.value('(/xxxCardOrderInfo//Phone/node())[1]', 'nvarchar(20)'),
@Fax = @OrderInfo.value('(/xxxCardOrderInfo//Fax/node())[1]', 'nvarchar(20)'),
@Zip = @OrderInfo.value('(/xxxCardOrderInfo//Zip/node())[1]', 'nvarchar(20)'),
@StoreId = @OrderInfo.value('(/xxxCardOrderInfo//StoreId/node())[1]', 'varchar(20)'),
@DeliverDate = @OrderInfo.value('(/xxxCardOrderInfo//DeliverDate/node())[1]', 'Datetime'),
@NeedInvoice = @OrderInfo.value('(/xxxCardOrderInfo//NeedInvoice/node())[1]', 'nvarchar(50)'),
@InvoiceType = @OrderInfo.value('(/xxxCardOrderInfo//InvoiceType/node())[1]', 'nvarchar(50)'),
@InvoiceTitle = @OrderInfo.value('(/xxxCardOrderInfo//InvoiceTitle/node())[1]', 'nvarchar(200)')
SET @DateNow=GETDATE();

IF OBJECT_ID('#TempxxxCardOrderDetail') IS NOT NULL
DROP TABLE #TempxxxCardOrderDetail;

BEGIN TRY
BEGIN TRAN;

INSERT INTO [xxxEvent].[dbo].[xxxCardOrder]
([OrderNumber]
,[CustomerId]
,[OrderDate]
,[Amount]
,[Status]
,[PaymentMethodCode]
,[Memo]
,[CardType]
,[CardNo]
,[ShippingAreaId]
,[ShippingContactWith]
,[ShippingAddress]
,[CellPhone]
,[Phone]
,[Fax]
,[Zip]
,[StoreId]
,[DeliverDate]
,[NeedInvoice]
,[InvoiceType]
,[InvoiceTitle]
,[TakeCardDate]
,[InUserId]
,[InDate]
,[EditUserId]
,[EditDate])
VALUES
(@OrderNumber
,@CustomerID
,@DateNow
,@Amount
,0
,@PaymentMethodCode
,@Memo
,@CardType
,@CardNo
,@ShippingAreaId
,@ShippingContactWith
,@ShippingAddress
,@CellPhone
,@Phone
,@Fax
,@Zip
,@StoreId
,@DeliverDate
,@NeedInvoice
,@InvoiceType
,@InvoiceTitle
,null
,@CustomerID
,@DateNow
,@CustomerID
,@DateNow
);

SELECT
@OrderNumber AS OrderNumber,
T.c.value('xxxCardType[1]','decimal(10,1)') AS xxxCardType,
T.c.value('UnitPrice[1]','decimal(10,1)') AS UnitPrice,
T.c.value('Quantity[1]','int') AS Quantity
INTO #TempxxxCardOrderDetail FROM @OrderInfo.nodes('xxxCardOrderInfo/xxxCardOrderDetails/xxxCardOrderDetailInfo') T(c);

INSERT INTO xxxCardOrderDetail SELECT * FROM #TempxxxCardOrderDetail;
COMMIT TRAN;
IF OBJECT_ID('#TempxxxCardOrderDetail') IS NOT NULL
DROP TABLE #TempxxxCardOrderDetail;
END TRY

BEGIN CATCH
ROLLBACK TRAN;
IF OBJECT_ID('#TempxxxCardOrderDetail') IS NOT NULL
DROP TABLE #TempxxxCardOrderDetail;

END CATCH

END

执行存储过程:

exec dbo.UP_PurchasexxxCard '<xxxCardOrderInfo>
<CommonInfor />
<EditInfor>
<InUserID>0</InUserID>
<InDate>2013-07-01T13:57:41.9436718+08:00</InDate>
<EditUserID>0</EditUserID>
<EditDate>2013-07-01T13:57:41.9436718+08:00</EditDate>
</EditInfor>
<OrderNumber>1030701628317</OrderNumber>
<CustomerId>1715580</CustomerId>
<OrderDate>2013-07-01T13:57:41.9576732+08:00</OrderDate>
<Amount>8000</Amount>
<Status>0</Status>
<PaymentMethodCode>3</PaymentMethodCode>
<Memo />
<CardType>身份证</CardType>
<CardNo>361234562323562356</CardNo>
<ShippingAreaId>100020102</ShippingAreaId>
<ShippingContactWith>张三</ShippingContactWith>
<ShippingAddress>天津市市辖区大港区撒旦法</ShippingAddress>
<CellPhone>15625625623</CellPhone>
<Phone />
<Zip>100000</Zip>
<StoreId>1001</StoreId>
<DeliverDate>2013-07-10T00:00:00</DeliverDate>
<NeedInvoice>公司</NeedInvoice>
<InvoiceType />
<InvoiceTitle>SXT</InvoiceTitle>
<xxxCardOrderDetails>
<xxxCardOrderDetailInfo>
<OrderNumber>1030701628317</OrderNumber>
<xxxCardType>500.0</xxxCardType>
<UnitPrice>500.0</UnitPrice>
<Quantity>4</Quantity>
</xxxCardOrderDetailInfo>
<xxxCardOrderDetailInfo>
<OrderNumber>1030701628317</OrderNumber>
<xxxCardType>1000.0</xxxCardType>
<UnitPrice>1000.0</UnitPrice>
<Quantity>2</Quantity>
</xxxCardOrderDetailInfo>
<xxxCardOrderDetailInfo>
<OrderNumber>1030701628317</OrderNumber>
<xxxCardType>2000.0</xxxCardType>
<UnitPrice>2000.0</UnitPrice>
<Quantity>2</Quantity>
</xxxCardOrderDetailInfo>
</xxxCardOrderDetails>
</xxxCardOrderInfo>'

SQL通过xml插入批量数据的更多相关文章

  1. SQL Server 2012中快速插入批量数据的示例及疑惑

    SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...

  2. SQL循环插入批量数据

    declare @i intdeclare @qid int set @i=1set @qid=100 while @i<50000begininsert into Order(orderid, ...

  3. [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序

    程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...

  4. SQL Server Bulk Insert批量数据导入

    SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快.远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP ...

  5. sql server不要插入大数据,开销太大

    sql server或者说关系型数据库中不要做一个字段存储大数据量的设计,比如要插入3000w条数据,然后每条数据中有一个文章字段,这个字段每条大概都需要存储几m的数据,那么算下来这个表就得有几百个G ...

  6. C API向MySQL插入批量数据的快速方法——关于mysql_autocommit

    MySQL默认的数据提交操作模式是自动提交模式(autocommit).这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行.我们可以通过设置autocommit的值改变是否是自 ...

  7. Oracle pl/sql导入sql文件,插入更新数据,中文乱码问题解决方案

    http://szh-java.iteye.com/blog/1869360 问题描述:用a.sql文件执行insert或update,不论是通过pl/sql还是sqlplus环境下执行,@文件名执行 ...

  8. sql 返回xml类型的数据

    1, 这中方式可以在Item节点上加一个Items节点作为所有item节点的父节点 SELECT  Orders.OrderNumber ,        ( SELECT    ProductID ...

  9. SQL 数据库连续插入大批量数据时超时

    经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致:      1.数据 ...

随机推荐

  1. C primer plus 读书笔记第五章

    本章的标题是运算符,表达式和语句.主要研究如何处理数据. 示例代码展示了一个使用简单的while循环的代码,难度不大. 下面简单介绍本章的基本概念. 1.基本运算符. 基本运算符有:赋值运算符(C语言 ...

  2. linux怎么给一个普通用户reboot权限?

    分四种情况讨论:1.让任何人(包括根本不拥有系统帐号的人)都可以通过控制台reboot在/etc/inittab文件中保留ca::ctrlaltdel:/sbin/shutdown -t3 -r no ...

  3. php中运用GD库实现简单验证码

    昨天学习了运用php的GD库进行验证码的实现. 首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的. 主要的步骤是: 1.生成验证码图片 2.随机生成字符 ...

  4. 【移动开发】WIFI热点通信(二)

    相信大家在上一篇中已经了解了Android中WIFI热点通信的相关操作知识(http://smallwoniu.blog.51cto.com/3911954/1536126),今天我们将在上一篇代码基 ...

  5. DecimalFormat用法

    DecimalFormat用法   DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字. DecimalFormat 包含一个模式 和一组符号 符号含义: ...

  6. Linux最大文件打开数

    介绍 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是 ...

  7. 面试题 HashMap 数据结构 实现原理

    数据结构 HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O ...

  8. Android集成Mina NIO Socket

    Mina简介 Apache MINA(Multipurpose Infrastructure 多功能框架 for Network Applications) 是 Apache 组织一个较新的项目,它为 ...

  9. SGU131--NYOJ435

    参考blog http://m.blog.csdn.net/blog/u012760629/36927465 http://www.cppblog.com/menrowitianya/archive/ ...

  10. mongodb创建副本集命令

    mongodb创建副本集命令 ./mongod --replSet spock --dbpath ../data --smallfiles > config ={... "_id&qu ...