使用SQL2000将现有代码作为Web服务提供(2)

作者:limeinan 时间:2009-02-19 17:20:00 

/* 订单是父 XML 元素 */

Select 1 as Tag, NULL as Parent,

Orders.OrderId AS [Order!1!OrderId],

Orders.OrderStatus AS [Order!1!OrderStatus],

Orders.OrderDate AS [Order!1!OrderDate],

Orders.SubTotal AS [Order!1!SubTotal],

Orders.Tax AS [Order!1!Tax],

Orders.ShippingHandling AS [Order!1!ShippingHandling],

Orders.ShipToName AS [Order!1!ShipToName],

Orders.ShipToAddressId AS [Order!1!ShipToAddressId],

NULL AS [OrderDetail!2!OrderDetailId],

NULL AS [OrderDetail!2!OrderId],

NULL AS [OrderDetail!2!ItemId],

NULL AS [OrderDetail!2!UnitPrice],

NULL AS [OrderDetail!2!Quantity]

from Orders

UNION ALL

/* 订单详细信息是子 XML 元素 */

select 2 as tag, 1 as parent,

Orders.OrderId AS [Order!1!OrderId],

NULL AS [Order!1!OrderStatus],

NULL AS [Order!1!OrderDate],

NULL AS [Order!1!SubTotal],

NULL AS [Order!1!Tax],

NULL AS [Order!1!ShippingHandling],

NULL AS [Order!1!ShipToName],

NULL AS [Order!1!ShipToAddressId],

OrderDetails.OrderDetailId AS [OrderDetail!2!OrderDetailId],

OrderDetails.OrderId AS [OrderDetail!2!OrderId],

OrderDetails.ItemId AS [OrderDetail!2!ItemId],

OrderDetails.UnitPrice AS [OrderDetail!2!UnitPrice],

OrderDetails.Quantity AS [OrderDetail!2!Quantity]

from Orders, OrderDetails

where Orders.OrderId = OrderDetails.OrderId

ORDER BY [Order!1!OrderId],[OrderDetail!2!OrderDetailId]

For XML EXPLICIT

写数据

以下示例中,通过 HTTP 请求提供表示层次行数据的 XML,然后将其传递到 ISAPI 模板中指定的 Transact SQL 代码。在存储过程中对 XML 进行语法分析,并进行相应的写入操作:

Create Procedure InsertOrder

@Order NVARCHAR(4000) = NULL,

@OrderId int Output

-

DECLARE @hDoc INT

DECLARE @PKId INT

BEGIN TRANSACTION

/* 将 XML 载入文档以进行分析 */

EXEC sp_xml_preparedocument @hDoc OUTPUT, @Order

/* 插入订单标头 */

INSERT Orders(CustomerId,

OrderDate,

ShipToName,

ShipToAddressId,

OrderStatus)

SELECT *

FROM OPENXML(@hDoc, '/NewDataSet/Orders')

WITH ( CustomerId int 'CustomerId',

OrderDate Datetime 'OrderDate',

ShipToName nvarchar(40) 'ShipToName',

ShipToAddressId int 'ShipToAddressId',

OrderStatus int 'OrderStatus')

SELECT @PKId = @@IDENTITY

/* 插入订单详细信息 */

INSERT OrderDetails (OrderId,

ItemId,

UnitPrice,

Quantity)

SELECT @PKId as OrderId, ItemId, UnitPrice, Quantity

FROM OPENXML(@hDoc, '/NewDataSet/Details')

WITH ( ItemId int 'ItemId',

UnitPrice money 'UnitPrice',

Quantity int 'Quantity')

/* 指定输出参数的值 */

Select @OrderId = @PKId

COMMIT TRANSACTION

/* 清除 XML 文档 */

EXEC sp_xml_removedocument @hDoc

总结

本文以及附带的示例介绍了有关数据转换的信息。通过数据转换,可以使用 SQL Server 2000 的 XML 功能将现有 Transact SQL 代码作为 Web 服务提供。本文集中讨论了传入和传出 Transact SQL 代码的数据与 SOAP 消息(在 Web 服务客户机和服务器之间使用)之间的转换。

这些解决方案的性能各异,并且受所传递的数据大小影响。在本系列后面的文章中,我们将对这些实现方法进行比较。

评估现有代码是否适合作为 Web 服务时,接口只不过是应当考虑的诸多因素之一。应考虑的其它因素包括安全性(包括授权、身份验证和加密)、事务模型、状态模型、返回错误和结果的方式,以及代码是同步还是异步执行,等等。

标签:SQL2000,Web服务
0
投稿

猜你喜欢

  • 价值3亿美元的按钮[译]

    2009-03-18 19:39:00
  • MySQL8新特性之全局参数持久化详解

    2024-01-23 12:17:10
  • opencv+python实现均值滤波

    2023-10-21 15:00:58
  • javascript 函数声明与函数表达式的区别介绍

    2024-04-23 09:08:50
  • SQL中limit函数语法与用法(MYSQL获取限制某行数据)

    2024-01-28 00:52:07
  • 请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释

    2024-01-20 23:48:30
  • 将Django使用的数据库从MySQL迁移到PostgreSQL的教程

    2024-01-26 20:09:26
  • 如何区分SQL数据库中的主键与外键

    2024-01-21 09:42:13
  • python网络爬虫之模拟登录 自动获取cookie值 验证码识别的具体实现

    2023-10-08 03:00:37
  • python机器学习朴素贝叶斯算法及模型的选择和调优详解

    2022-05-16 00:38:26
  • 原生JS实现Ajax通过POST方式与PHP进行交互的方法示例

    2023-09-07 22:44:41
  • windows8.1下Apache+Php+MySQL配置步骤

    2023-06-06 17:59:16
  • Scrapy 配置动态代理IP的实现

    2023-12-10 19:06:22
  • python实现ip查询示例

    2021-07-07 20:04:32
  • 安装dbus-python的简要教程

    2021-09-07 10:09:43
  • Python实现连接FTP并下载文件夹

    2021-02-28 01:56:26
  • Python语法分析之字符串格式化

    2021-10-09 18:00:09
  • python构造icmp echo请求和实现网络探测器功能代码分享

    2023-07-14 15:53:43
  • Linux ORCLE数据库增量备份脚本

    2009-11-21 09:43:00
  • js中判断数字\\字母\\中文的正则表达式 (实例)

    2024-04-10 10:56:07
  • asp之家 网络编程 m.aspxhome.com