select @[email protected]('*')
for xml raw,type
上面的語句將產生以下警告:
消息6819,級別16,狀態3,行2
FOR XML子句不是在賦值語句允許。節省了FOR XML AUTO結果變量在SQL
select @[email protected]('*')
for xml raw,type
上面的語句將產生以下警告:
消息6819,級別16,狀態3,行2
FOR XML子句不是在賦值語句允許。節省了FOR XML AUTO結果變量在SQL
例如
DECLARE @xml_var XML
SET @xml_var =
(
SELECT *,
(
SELECT *
FROM Orders
WHERE Orders.CustomerID=Customers.CustomerID
FOR XML AUTO, TYPE
)
FROM Customers WHERE CustomerID='ALFKI'
FOR XML AUTO, TYPE
)
參考: http://blogs.msdn.com/sqlprogrammability/articles/576095.aspx
對於那些使用SQL Server 2000,FOR XML基本是沒用的;你不能生成的XML分配到一個變量,插入表,等我有需要時做手工,這是我的示例:
SET NOCOUNT ON
create table #parcelData (
parcelID int
, [description] varchar(20)
)
--insert sample data
insert into #parcelData
select 1, 'apples' UNION
select 3, 'oranges' UNION
select 25, 'bananas' UNION
select 69, 'maracuja'
print '-- Example 1: FOR XML RAW --'
select parcelID as pID
from #parcelData
ORDER BY parcelID
FOR XML RAW
--> <row pID="17"/><row pID="25"/><row pID="26"/><row pID="333"/>
print '-- Example 2: Build XML Manually --'
declare @parcelRow varchar(50), @dummy int
, @xmlRowStr varchar(8000)
set @xmlRowStr = '' -- initialize.
DECLARE parcel_cursor CURSOR FOR
select DISTINCT '<row pID="' + cast(parcelID as varchar(10)) + '"/>', parcelID as parcelRow
from #parcelData
ORDER BY parcelID
OPEN parcel_cursor
FETCH NEXT FROM parcel_cursor
INTO @parcelRow, @dummy
WHILE @@FETCH_STATUS = 0 BEGIN
-- build the xml row by row.
set @xmlRowStr = @xmlRowStr + @parcelRow
-- Get next row
FETCH NEXT FROM parcel_cursor
INTO @parcelRow, @dummy
END
CLOSE parcel_cursor
DEALLOCATE parcel_cursor
--print @xmlRowStr
-- wrap a root element around
if @xmlRowStr != '' begin
set @xmlRowStr = '<ROOT>' + @xmlRowStr + '</ROOT>'
end
select @xmlRowStr as XmlOut
DROP TABLE #parcelData
SET NOCOUNT OFF
當心,這並不在SQL Server 2000中 – joedotnot 2009-09-16 07:45:13