【发布时间】:2020-11-05 02:54:55
【问题描述】:
我目前正在读取以前使用 FOR XML AUTO 导出的 SQL Server 中的数据:
SELECT object_id, name,
( SELECT schema_id, name
FROM sys.schemas [schema]
WHERE [schema].schema_id = [table].schema_id
FOR XML AUTO, TYPE
),
( SELECT index_id, name, type, is_unique
FROM sys.indexes [index]
WHERE [index].object_id = [table].object_id
FOR XML AUTO, TYPE
)
FROM sys.tables [table]
WHERE object_id = 357576312
FOR XML AUTO
我得到了这个 XML:
<table object_id="357576312" name="Address">
<schema schema_id="5" name="SalesLT" />
<index index_id="1" name="PK_Address_AddressID" type="1" is_unique="1" />
<index index_id="2" name="AK_Address_rowguid" type="2" is_unique="1" />
<index index_id="3" name="IX_Address_AddressLine1_AddressLine2_City_StateProvince_PostalCode_CountryRegion" type="2" is_unique="0" />
<index index_id="4" name="IX_Address_StateProvince" type="2" is_unique="0" />
</table>
我需要得到与此相同的输出:
SELECT [table].object_id table_object_id, [table].name table_name, [schema].schema_id, [schema].name schema_name, [index].index_id, [index].name object_name, [index].type, [index].is_unique
FROM sys.tables [table]
JOIN sys.schemas [schema] ON [schema].schema_id = [table].schema_id
JOIN sys.indexes [index] ON [index].object_id = [table].object_id
我从一个我还没有得到的草稿开始。
SELECT T.Data.value('@object_id', ' INT') table_object_id,
T.Data.value('@name', ' NVARCHAR(128)') table_name,
T.Data.value('@object_id', ' INT') schema_object_id,
T.Data.value('@name', ' NVARCHAR(128)') schema_name,
T.Data.value('@index_id', ' INT') index_id,
T.Data.value('@name', ' NVARCHAR(128)') index_name,
T.Data.value('@type', ' TINYINT') type,
T.Data.value('@is_unique', ' BIT') is_unique
FROM @xml.nodes('table') T(Data)
;
我如何让它对孩子有用?或者有没有更简单的方法来读取 XML 以输出为平面表?
【问题讨论】:
标签: sql-server xml tsql xquery