SQL通过xml插入批量数据
存储过程:
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插入批量数据的更多相关文章
- SQL Server 2012中快速插入批量数据的示例及疑惑
SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...
- SQL循环插入批量数据
declare @i intdeclare @qid int set @i=1set @qid=100 while @i<50000begininsert into Order(orderid, ...
- [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序
程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...
- SQL Server Bulk Insert批量数据导入
SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快.远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP ...
- sql server不要插入大数据,开销太大
sql server或者说关系型数据库中不要做一个字段存储大数据量的设计,比如要插入3000w条数据,然后每条数据中有一个文章字段,这个字段每条大概都需要存储几m的数据,那么算下来这个表就得有几百个G ...
- C API向MySQL插入批量数据的快速方法——关于mysql_autocommit
MySQL默认的数据提交操作模式是自动提交模式(autocommit).这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行.我们可以通过设置autocommit的值改变是否是自 ...
- Oracle pl/sql导入sql文件,插入更新数据,中文乱码问题解决方案
http://szh-java.iteye.com/blog/1869360 问题描述:用a.sql文件执行insert或update,不论是通过pl/sql还是sqlplus环境下执行,@文件名执行 ...
- sql 返回xml类型的数据
1, 这中方式可以在Item节点上加一个Items节点作为所有item节点的父节点 SELECT Orders.OrderNumber , ( SELECT ProductID ...
- SQL 数据库连续插入大批量数据时超时
经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致: 1.数据 ...
随机推荐
- 关于在SLES11, RHEL6, OEL6 and UEK2 Kernels使用hugepages的告警
ALERT: Disable Transparent HugePages on SLES11, RHEL6, OEL6 and UEK2 Kernels (Doc ID 1557478.1) Modi ...
- C# 关键字--using
using 关键字有两个主要用途: (一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型. (二).作为语句,用于定义一个范围,在此范围的末尾将释放对象. using指令 ...
- Windows下搭建MySQL Master Slave[转]
Windows下搭建MySQL Master Slave 一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用k ...
- Android 使用 RemoteViews 发送自定义通知 ,遇到 Couldn't expand RemoteViews问题总结
在RemoteViews这种调用方式中,你只能使用以下几种界面组件: Layout: FrameLayout, LinearLayout, RelativeLayout Component: ...
- ASSERT_VALID和ASSERT宏分析
这个宏都是MFC的调试宏. ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题. 事实上, ...
- Android中使用ListView绘制自定义表格(2)
上回再写了<Android中使用ListView绘制自定义表格>后,很多人留言代码不全和没有数据样例.但因为项目原因,没法把源码全部贴上来.近两天,抽空简化了一下,做了一个例子. 效果图如 ...
- canvas toDataUrl 跨域问题
使用canvas 的 toDataUrl方法会遇到跨域问题 chrome 会报下面的错误: Uncaught SecurityError: Failed to execute 'toDataURL' ...
- 《CSS网站布局实录》学习笔记(五)
第五章 CSS内容排版 5.1 文字排版 5.1.1 通栏排版 进行网页通栏排版时,只要直接将段落文字放置于p或者其他对象中,再对段落文字应用间距.行距.字号等样式控制,便形成了排版雏形. 5.1.2 ...
- Android Studio中新建项目时Your android sdk is out of date or is missing templates的解决办法
在Android Studio中新建项目时出现了以下问题:Your android sdk is out of date or is missing templates. Please ensure ...
- errno.h 错误码描述.
描述:一般说的Linux源码的目录,默认是基于 /usr/include/ 的. 使用 char *strerror(int errnum); 函数打印错误代码的描述.我简单对比了一下,发现描述大体一 ...