2012-10-11 29 views
0

我发现这个tsql查询显示表的xml模式,它工作得很好。如何显示从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,所以我有点不知所措,但是我必须为大量表格做这件事,而且我不想亲手写这些。

对此有何意见?

回答

1

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

+0

好吧,这是有道理的,我会检查出ERWin。 –