在不指定列名的情況下做到這一點有點棘手,但可行。
要使用此功能,您需要用您的表名替換@T
,並將表名稱常量'StateProvince'
更改爲您的表名稱。
declare @T table
(
StateProvinceID int,
StateProvinceCode char(2),
CountryRegionCode char(2),
IsOnlyStateProvinceFlag int,
Name varchar(50),
TerritoryID int,
rowguid uniqueidentifier,
ModifiedDate datetime
)
insert into @T values
(1, 'AB', 'CA', 0, 'Alberta', 6, '298C2880-AB1C-4982-A5AD-A36EB4BA0D34', '2004-03-11T10:17:21.587'),
(2, 'AB', 'CA', 0, 'Alberta', 6, '298C2880-AB1C-4982-A5AD-A36EB4BA0D34', '2004-03-11T10:17:21.587')
select 'StateProvince' as [@name],
(
select
(
select T3.N.value('local-name(.)', 'sysname') as [@name],
T3.N.value('.', 'nvarchar(max)') as [@value]
from (
select T1.*
for xml path(''), type
) T2(N)
cross apply T2.N.nodes('*') as T3(N)
for xml path('COL'), root('ROW'), type
)
from @T as T1
for xml path(''), type
)
for xml path('TABLE')
結果:
<TABLE name="StateProvince">
<ROW>
<COL name="StateProvinceID" value="1" />
<COL name="StateProvinceCode" value="AB" />
<COL name="CountryRegionCode" value="CA" />
<COL name="IsOnlyStateProvinceFlag" value="0" />
<COL name="Name" value="Alberta" />
<COL name="TerritoryID" value="6" />
<COL name="rowguid" value="298C2880-AB1C-4982-A5AD-A36EB4BA0D34" />
<COL name="ModifiedDate" value="2004-03-11T10:17:21.587" />
</ROW>
<ROW>
<COL name="StateProvinceID" value="2" />
<COL name="StateProvinceCode" value="AB" />
<COL name="CountryRegionCode" value="CA" />
<COL name="IsOnlyStateProvinceFlag" value="0" />
<COL name="Name" value="Alberta" />
<COL name="TerritoryID" value="6" />
<COL name="rowguid" value="298C2880-AB1C-4982-A5AD-A36EB4BA0D34" />
<COL name="ModifiedDate" value="2004-03-11T10:17:21.587" />
</ROW>
</TABLE>
注:表格中的列名必須是一個有效的XML元素名稱。例如,您可以在列名中沒有任何空格。
感謝Mikael,之前我曾見過類似的東西,並希望我失去了一些更容易。 :-) – SumOfDavid 2012-03-03 22:28:14