我发现这个 tsql 查询显示了一个表的 xml 模式,它工作得很好。
SELECT * FROM TableA
FOR XML AUTO, XMLSCHEMA
我现在正试图通过这个查询来显示表之间的关系。我不确定这是否可能。我已经模拟了几个测试表,但我没有任何运气。基本上,我在 tableA 和 tableB 之间创建一对多的关系,然后在 xml 模式中它将 tableA 显示为父级,而 tableB 将是模式中的子级。
这就是我一直在运行的。:
SELECT * FROM TableA,
dbo.TableB
FOR XML AUTO, XMLSCHEMA
这是我从上述查询中获得的示例 xml 模式文件。
<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet7" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet7" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="TableA">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="columnA" type="sqltypes:int" />
<xsd:element name="columnB">
<xsd:simpleType>
<xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="BinarySort">
<xsd:maxLength value="50" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element ref="schema:dbo.tylersTestTable2" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="TableB">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="columnA" type="sqltypes:int" />
<xsd:element name="columnB">
<xsd:simpleType>
<xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="BinarySort">
<xsd:maxLength value="50" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="fkToTableA" type="sqltypes:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
如您所见,它将表显示为架构中的相同级别,而不是真正显示父子关系。我在这里有点不知所措,因为我不是 dba,但我必须为大量表格执行此操作,而且我不想全部手动编写。
关于这个有什么想法吗?