0

我发现这个 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,但我必须为大量表格执行此操作,而且我不想全部手动编写。

关于这个有什么想法吗?

4

1 回答 1

2

TSQL 中的表没有真正的父子关系。每个表处于同一级别,外键关系可能会对一个或两个表中的数据造成约束。从逻辑上讲,一张表可能是父表,一张表是子表,但这绝不意味着它们是物理层次结构。您可以使用像 ERwin 这样的建模工具来生成 XML,该工具将物理模型解释为逻辑模型,但 TSQL 实际上只看到物理模型。

于 2012-10-11T19:20:08.277 回答