深入探讨SQLServer 2000对XML的支持
时间:2007-12-23 来源:不详 作者:迈克DB
SELECTCustomers.CustomerID,Orders.OrderID,Orders.OrderDate
FROMCustomers,Orders
WHERECustomers.CustomerID=Orders.CustomerID
ORDERBYCustomers.CustomerID
FORXMLRAW
下面是部分结果:
<rowCustomerID="ALFKI"OrderID="10643"OrderDate="1997-08-25T00:00:00"/>
<rowCustomerID="ANATR"OrderID="10308"OrderDate="1996-09-18T00:00:00"/>
<rowCustomerID="ANATR"OrderID="10625"OrderDate="1997-08-08T00:00:00"/>
<rowCustomerID="AROUT"OrderID="10355"OrderDate="1996-11-15T00:00:00"/>
可以使用外部联接指定上面的查询在结果集中返回所有客户,无论这些客户是否有订
SELECTC.CustomerID,O.OrderID,O.OrderDate
FROMCustomersCLEFTOUTERJOINOrdersOONC.CustomerID=
O.CustomerID ORDERBYC.CustomerID FORXMLRAW
下面是部分结果:
<rowCustomerID="BONAP"OrderID="11076"OrderDate="1998-05-06T00:00:00"/>
<rowCustomerID="FISSA"/>
<rowCustomerID="PARIS"/>
<rowCustomerID="RICSU"OrderID="11075"OrderDate="1998-05-06T00:00:00"/> dedecms.com
我们还可以使用HTTP执行存储过程,比如下面这个名为GetXML的存储过程:
CREATEPROCEDUREGetXml
(
@CustomerIDvarchar(5)
)
AS
BEGIN
SELECTCustomerID,CompanyName,ContactName
FROMCustomers
WHERECustomerIDLIKE@CustomerID ’%’
FORXMLAUTO
END
为了执行这个存储过程并传送相应的参数,我们可以使用下面这段URL,
http://localhost/northwind?sql=exec GetXml ’A’&root=root。这样,我们就能够在更高一
层次使用存储过程,并且可以根据最终用户想要得到的结果动态的改变参数值(比如在本例中
三、使用XML模板进行查询
SQLServer2000通过在HTTP请求中内嵌SQL语句的功能显然是非常强大并且有用的
。但是这种见也隐藏着极大的隐患,一旦某个最终用户了解了直接使用浏览器查询数据库的方
法,那么数据库中的数据就很危险了,因为最终用户可能会尝试执行他自己的insert,update
为了维护大部分数据库中数据交易的安全,使用户不能够直接使用URL进行查询,
SQLServer2000介绍了XML模板的概念,可以设置SQLServer虚拟目录把这些URL查询导向那
在我们讨论模板概念之前,让我们重新回到SQLServer的IIS虚拟目录治理器中,进
dedecms.com
入“设置”选项卡。为了防止用户使用HTTP访问,我们必须把“答应URL查询”选项给去掉
为了答应XML模板执行SQL查询,进入“虚拟名称”选项卡,并单击新建按钮,新建一
个模板文件夹,取名为templates,在下拉菜单中选择template。然后,要么输入一个你的
XML模板将储存的路径或者单击“浏览”按钮。本例中使用C:Inetp
ubwwwrootxmlemplates。一旦你已经提供了所有的必要的信息,请单击“保存”按钮。
现在一个虚拟目录已经被映射到一个指定来保存XML查询模板的文件夹,让我们创建
一个有效的XML模板,用来执行SQL查询。下面的代码是一个模板示例。
织梦好,好织梦
文章评论
共有位Admini5网友发表了评论 查看完整内容