200,“XML传入数据到sql server 然后到存储过程解析”如何作到?? 不会,没用过,only up to you 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在JAVA区看到的http://community.csdn.net/Expert/topic/5672/5672800.xml?temp=.8524744选的一段话。胖子:orcale你用过吧,那Oracle的硬解析和软解析是什么,说下. 俺:这个俺不会 胖子:这不会,那你还说熟悉orcacle (日死,俺气得半死,出来混的,简历上怎么也得吹下,有你这样说人的吗) 俺:那您熟悉sql server吗? 胖子牛B哄哄:当然 俺:那你会用XML传入数据到sql server 然后到存储过程解析吗? 胖子:.... 俺小声说:你这也叫熟悉sql server 胖子:....(无语中) 这么一说,我虽然用了3年多,也只是入门啊!!!请问高人,您“熟悉sql server”吗??^_^ 本来不想说的,JAVA区的人气真是很旺,高人也真是了得。SQL区更是,藏龙的地儿=============我看过这样一篇文章,如下在SQL Server2005中,微软延续了 2000中一个特性(即支持XML类型的数据),并加强了对XML 数据列、XML变量以及XML索引的支持。在数据库中存储XML数据是一个很出色的特征。对于大部分的数据处理需求来讲,将XML数据格式化为其它关联数据是十分重要。这也是引入OPENXML函数的原因。OPENXML是一个SQL Server提供的函数,它的作用是接收XML数据,提供内存中 XML数据的行集视图。一个OPENXML函数用例在下面的例子中,我们将演示如何使用OPENXML函数。假定我们现在正在从事一个网上购物系统开发。在这个场景中,顾客选择登录网站方式购买多种产品。因为根据公司的商业模式,通过网站购物能够节省成本。我们假定大部分的顾客都购买了七件或者更多的商品。我们的目标是当客户频繁的访问网站的时候,要尽量减少数据库的调用。我们的想法是将网页上提交的采购需求存储为XML文档,并且将其中的XML数据以字符串的形式传送给数据库底层的程序处理。这样,我们就可以在一次数据库调用中将XML数据中的订单信息插入数据库中。我们该如何解决上面的问题呢?首先我们看看将要编辑的网页数据。一个简单的XML文档含有来自网站的很多核心信息,包括:产品名称、价格、日期以及顾客资料。列表A包含了一个简单的XML数据流。<ShoppingCart> <Purchase ProductID="7" Price="10.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="99" Price="25.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="32" Price="12.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="11" Price="90.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="7" Price="50.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="8" Price="67.35" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="45" Price="29.99" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="54" Price="49.49" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> </ShoppingCart> 列表A然后,我们需要设计一个网页接口提供存储程序的调用。通过调用这一存储程序,将XML数据流存储至数据库。列表B是这一存储程序的实现内容。CREATE PROCEDURE usp_InsertShoppingCartOrder ( @xml XML ) AS BEGIN DECLARE @Pointer INT EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@xml INSERT INTO WebSales ( ProductID, SalePrice, SaleDate, SaleBatchID, CustomerID ) SELECT ProductID, Price, SaleDate, SaleBatchID, CustomerID FROM OPENXML (@Pointer,'/ShoppingCart/Purchase') WITH ( ProductID INT, Price MONEY, SaleDate SMALLDATETIME, SaleBatchID INT, CustomerID INT ) EXEC sp_xml_removedocument @Pointer END 列表B这一存储程序支持XML数据类型(SQL Server 2005中新特色)作为输入参数(我们也可以使用变量字符数据类型作为我们的输入参数,例如VARCHAR (max)或者定义VARCHAR数据类型)。接下来,我们调用系统程序sp_xml_preparedocument,它不仅创建了XML文档在内存中的表示,也允许XML文档作为调用参数。一旦我们拥有了指向内存中XML文档的句柄,就可以调用OPENXML函数。在函数调用中使用不同的参数,还可以对XML数据的返回结果集进行详细的控制。我们提供指向XML文档的句柄,并且通过XPATH查询返回想要的XML数据中的节点。OPENXML函数中的WITH子句允许指定返回数据的行集格式。一旦将数据插入到websales 表格中,就可以调用系统程序sp_xml_removedocument删除SQL Server 服务器内存中的XML数据。这个简单的例子演示了通过OPENXML函数来减少数据库调用次数的强大功能。OPENXML函数提供很大的灵活性,你既可以将所有的XML数据插入到SQL Server 数据表中,也可以拆分XML文件,将其插入到不同的SQL Server数据表中。通过这一技术,我们就可以在一次程序调用中插入8条记录,而不是像传统的技术那样,要通过8次操作实现。OPENXML的局限性调用OPENXML函数时要注意内存的使用情况。系统程序sp_xml_preparedocument 的返回值是指向内存中XML文档的句柄。所以,你最好不要使用OPENXML加载较大的XML文档,因为那样可能会造成服务器的内存溢出。在以后的文章中,我将会向你介绍如何使用SQL Server 2005提供的关于XML的一些新属性,这些新属性不仅能够实现OPENXML函数的功能,而且不需要考虑OPENXML调用时产生的内存操作问题。作者简介Tim Chapman先生在一家位于Louisville, KY的银行从事数据库管理员的工作,拥有7年的IT工作经验。他还通过了微软的SQL Server 2000和SQL Server 2005认证。-===============希望对你有用。 谢谢,octverve(炎之脉)您见识广啊,请到SQL区接分吧。并且,那篇文章的作者也与我联系了,是与octverve(炎之脉)说的一致,并愿意提供代码。CSDN,真是热心人多啊。感谢,各们好心人。 CSDN广告框 用JS实现层的显示隐藏求助,内详~~ 为什么我办公室的计算机上不了csdn了(左边的菜单显示不出来)? 虚拟主机webservice .asmx文件跑不起来? textbox属性设为ReadOnly的时候不能用RequiredFieldValidator 怎么在代码中往WebConfig中写一个值? SqlCommand数组的问题 下载了一个asp.net,运行提示错误 ASP.NET 一个关于转向的问题? GridView“Grid”激发了未处理的事件“Sorting”? dsoframer 如何屏蔽鼠标右键菜单和快捷键
http://community.csdn.net/Expert/topic/5672/5672800.xml?temp=.8524744选的一段话。胖子:orcale你用过吧,那Oracle的硬解析和软解析是什么,说下.
俺:这个俺不会
胖子:这不会,那你还说熟悉orcacle
(日死,俺气得半死,出来混的,简历上怎么也得吹下,有你这样说人的吗)
俺:那您熟悉sql server吗?
胖子牛B哄哄:当然
俺:那你会用XML传入数据到sql server 然后到存储过程解析吗?
胖子:....
俺小声说:你这也叫熟悉sql server
胖子:....(无语中)
请问高人,您“熟悉sql server”吗??^_^
我看过这样一篇文章,如下在SQL Server2005中,微软延续了 2000中一个特性(即支持XML类型的数据),并加强了对XML 数据列、XML变量以及XML索引的支持。在数据库中存储XML数据是一个很出色的特征。对于大部分的数据处理需求来讲,将XML数据格式化为其它关联数据是十分重要。这也是引入OPENXML函数的原因。OPENXML是一个SQL Server提供的函数,它的作用是接收XML数据,提供内存中 XML数据的行集视图。一个OPENXML函数用例在下面的例子中,我们将演示如何使用OPENXML函数。假定我们现在正在从事一个网上购物系统开发。在这个场景中,顾客选择登录网站方式购买多种产品。因为根据公司的商业模式,通过网站购物能够节省成本。我们假定大部分的顾客都购买了七件或者更多的商品。我们的目标是当客户频繁的访问网站的时候,要尽量减少数据库的调用。我们的想法是将网页上提交的采购需求存储为XML文档,并且将其中的XML数据以字符串的形式传送给数据库底层的程序处理。这样,我们就可以在一次数据库调用中将XML数据中的订单信息插入数据库中。我们该如何解决上面的问题呢?首先我们看看将要编辑的网页数据。一个简单的XML文档含有来自网站的很多核心信息,包括:产品名称、价格、日期以及顾客资料。列表A包含了一个简单的XML数据流。<ShoppingCart> <Purchase ProductID="7" Price="10.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="99" Price="25.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="32" Price="12.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="11" Price="90.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="7" Price="50.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="8" Price="67.35" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="45" Price="29.99" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> <Purchase ProductID="54" Price="49.49" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/> </ShoppingCart> 列表A然后,我们需要设计一个网页接口提供存储程序的调用。通过调用这一存储程序,将XML数据流存储至数据库。列表B是这一存储程序的实现内容。CREATE PROCEDURE usp_InsertShoppingCartOrder
(
@xml XML
)
AS
BEGIN
DECLARE @Pointer INT
EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@xml INSERT INTO WebSales
(
ProductID,
SalePrice,
SaleDate,
SaleBatchID,
CustomerID
)
SELECT
ProductID,
Price,
SaleDate,
SaleBatchID,
CustomerID
FROM
OPENXML (@Pointer,'/ShoppingCart/Purchase')
WITH
(
ProductID INT,
Price MONEY,
SaleDate SMALLDATETIME,
SaleBatchID INT,
CustomerID INT
) EXEC sp_xml_removedocument @Pointer
END 列表B这一存储程序支持XML数据类型(SQL Server 2005中新特色)作为输入参数(我们也可以使用变量字符数据类型作为我们的输入参数,例如VARCHAR (max)或者定义VARCHAR数据类型)。接下来,我们调用系统程序sp_xml_preparedocument,它不仅创建了XML文档在内存中的表示,也允许XML文档作为调用参数。一旦我们拥有了指向内存中XML文档的句柄,就可以调用OPENXML函数。在函数调用中使用不同的参数,还可以对XML数据的返回结果集进行详细的控制。我们提供指向XML文档的句柄,并且通过XPATH查询返回想要的XML数据中的节点。OPENXML函数中的WITH子句允许指定返回数据的行集格式。一旦将数据插入到websales 表格中,就可以调用系统程序sp_xml_removedocument删除SQL Server 服务器内存中的XML数据。这个简单的例子演示了通过OPENXML函数来减少数据库调用次数的强大功能。OPENXML函数提供很大的灵活性,你既可以将所有的XML数据插入到SQL Server 数据表中,也可以拆分XML文件,将其插入到不同的SQL Server数据表中。通过这一技术,我们就可以在一次程序调用中插入8条记录,而不是像传统的技术那样,要通过8次操作实现。OPENXML的局限性调用OPENXML函数时要注意内存的使用情况。系统程序sp_xml_preparedocument 的返回值是指向内存中XML文档的句柄。所以,你最好不要使用OPENXML加载较大的XML文档,因为那样可能会造成服务器的内存溢出。在以后的文章中,我将会向你介绍如何使用SQL Server 2005提供的关于XML的一些新属性,这些新属性不仅能够实现OPENXML函数的功能,而且不需要考虑OPENXML调用时产生的内存操作问题。作者简介Tim Chapman先生在一家位于Louisville, KY的银行从事数据库管理员的工作,拥有7年的IT工作经验。他还通过了微软的SQL Server 2000和SQL Server 2005认证。
-===============希望对你有用。
并且,那篇文章的作者也与我联系了,是与octverve(炎之脉)说的一致,并愿意提供代码。CSDN,真是热心人多啊。感谢,各们好心人。