SQL返回XML格式的数据
时间:2007-04-11 来源:weiwei6659
SQL Server 2000 提供了几种从SQL Server返回XML格式数据的方法。
怎么样,有心动的感觉么? Let's Go !
我们还是用系统自带的Northwind数据库做演示。
下面这句我们可以返回所有Products表中单价大于50的ProductName字段的值,这是我们经常用的写法。
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
为了能返回XML格式的数据,我们把这句稍微改动一下。
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
FOR XML RAW
查询结果可能如下:
<row ProductName="Mishi Kobe Niku"/><row ProductName="Carnarvon Tigers"/><row ProductName="Sir Rodney's Marmalade"/><row ProductName="Thüringer Rostbratwurst"/><row ProductName="Côte de Blaye"/><row ProductName="Manjimup Dried Apples"/><row ProductNam
...
呵呵,是不是很方便,通过一个简单的FOR XML RAW就能返回XML格式的数据,这里的Raw是一个参数,告诉系统返回未加工的元素,XML属性名即为数据库字段名,XML属性值即为数据库对应字段值。
当然除了RAW还有别的参数的,比如 AUTO或者 EXPLICIT
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
FOR XML AUTO
查询结果可能如下:
<Products ProductName="Mishi Kobe Niku"/><Products ProductName="Carnarvon Tigers"/><Products ProductName="Sir Rodney's Marmalade"/><Products ProductName="Thüringer Rostbratwurst"/><Products ProductName="Côte de Blaye"/><Products ProductName="Manjimup
...
发现跟RAW有什么不同了么?数据库的表名也作为属性返回来了。
SELECT ContactName, OrderID
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.OrderID
WHERE Customers.Country = 'Germany'
FOR XML AUTO
查询结果可能如下:
<customers ContactName="Maria Anders">
<orders OrderID="10643" />
<orders OrderID="10692" />
...
</customers>
<customers ContactName="Hanna Moos">
<orders OrderID="10501" />
<orders OrderID="10509" />
...
</customers>
<customers ContactName="Sven Ottlieb">
<orders OrderID="10363" />
...
正如你看到的,返回的XML文档包含了子元素。
还剩下一个参数 EXPLICIT ,这个参数在RAW和AUTO都不好用的时候可以考虑一下,可以用它返回比较复杂的XML文档。
怎么样,有心动的感觉么? Let's Go !
我们还是用系统自带的Northwind数据库做演示。
下面这句我们可以返回所有Products表中单价大于50的ProductName字段的值,这是我们经常用的写法。
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
为了能返回XML格式的数据,我们把这句稍微改动一下。
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
FOR XML RAW
查询结果可能如下:
<row ProductName="Mishi Kobe Niku"/><row ProductName="Carnarvon Tigers"/><row ProductName="Sir Rodney's Marmalade"/><row ProductName="Thüringer Rostbratwurst"/><row ProductName="Côte de Blaye"/><row ProductName="Manjimup Dried Apples"/><row ProductNam
...
呵呵,是不是很方便,通过一个简单的FOR XML RAW就能返回XML格式的数据,这里的Raw是一个参数,告诉系统返回未加工的元素,XML属性名即为数据库字段名,XML属性值即为数据库对应字段值。
当然除了RAW还有别的参数的,比如 AUTO或者 EXPLICIT
SELECT ProductName
FROM Products
WHERE (UnitPrice > 50)
FOR XML AUTO
查询结果可能如下:
<Products ProductName="Mishi Kobe Niku"/><Products ProductName="Carnarvon Tigers"/><Products ProductName="Sir Rodney's Marmalade"/><Products ProductName="Thüringer Rostbratwurst"/><Products ProductName="Côte de Blaye"/><Products ProductName="Manjimup
...
发现跟RAW有什么不同了么?数据库的表名也作为属性返回来了。
SELECT ContactName, OrderID
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.OrderID
WHERE Customers.Country = 'Germany'
FOR XML AUTO
查询结果可能如下:
<customers ContactName="Maria Anders">
<orders OrderID="10643" />
<orders OrderID="10692" />
...
</customers>
<customers ContactName="Hanna Moos">
<orders OrderID="10501" />
<orders OrderID="10509" />
...
</customers>
<customers ContactName="Sven Ottlieb">
<orders OrderID="10363" />
...
正如你看到的,返回的XML文档包含了子元素。
还剩下一个参数 EXPLICIT ,这个参数在RAW和AUTO都不好用的时候可以考虑一下,可以用它返回比较复杂的XML文档。
相关阅读 更多 +