Hi thereI want to generate an XSD for my database. I have a simple query, but the output is not quite what I want, so I was wondering if there is an easy way to do it?In the example below, I have a Header table and a Child table (Item). The XSD I want to create will display this relationship (so the child elements will be nested in the Header element), and I also want to remove the fields that have already been declared in the Header elements. For instance, the Item table is related to the header by the TransactionID and EndTransDateTime. I don't want to repeat those elements in the Item XSD:CREATE TABLE dbo.Header( TransactionID INT, EndTransDateTime DATETIME, Amount INT, CONSTRAINT PK_Header PRIMARY KEY ( TransactionID , EndTransDateTime ))CREATE TABLE dbo.Item( TransactionID INT, EndTransDateTime DATETIME, RecordSeqNo INT, ProductID INT, CONSTRAINT PK_Item PRIMARY KEY ( TransactionID , EndTransDateTime , RecordSeqNo ))ALTER TABLE dbo.Item ADD CONSTRAINT FK_Header_Item FOREIGN KEY (TransactionID,EndTransDateTime) REFERENCES dbo.Header(TransactionID,EndTransDateTime)SELECT * FROM dbo.Header Header INNER JOIN dbo.Item Item ON Item.TransactionID = Header.TransactionID AND Item.EndTransDateTime = Header.EndTransDateTimeFOR XML AUTO, XMLSCHEMA ('CRDM Schema')DROP TABLE dbo.ItemDROP TABLE dbo.HeaderCURRENT OUTPUT:<xsd:schema targetNamespace="CRDM Schema" xmlns:schema="CRDM Schema" 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="Header"> <xsd:complexType> <xsd:sequence> <xsd:element ref="schema:Item" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="TransactionID" type="sqltypes:int" use="required" /> <xsd:attribute name="EndTransDateTime" type="sqltypes:datetime" use="required" /> <xsd:attribute name="Amount" type="sqltypes:int" /> </xsd:complexType> </xsd:element> <xsd:element name="Item"> <xsd:complexType> <xsd:attribute name="TransactionID" type="sqltypes:int" use="required" /> <xsd:attribute name="EndTransDateTime" type="sqltypes:datetime" use="required" /> <xsd:attribute name="RecordSeqNo" type="sqltypes:int" use="required" /> <xsd:attribute name="ProductID" type="sqltypes:int" /> </xsd:complexType> </xsd:element></xsd:schema>
DESIRED OUTPUT:<xsd:schema targetNamespace="CRDM Schema" xmlns:schema="CRDM Schema" 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="Header"> <xsd:complexType> <xsd:sequence> <xsd:element ref="schema:Item" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="TransactionID" type="sqltypes:int" use="required" /> <xsd:attribute name="EndTransDateTime" type="sqltypes:datetime" use="required" /> <xsd:attribute name="Amount" type="sqltypes:int" /> <xsd:element name="Item"> <xsd:complexType> <xsd:attribute name="RecordSeqNo" type="sqltypes:int" use="required" /> <xsd:attribute name="ProductID" type="sqltypes:int" /> </xsd:complexType> </xsd:element> </xsd:complexType> </xsd:element></xsd:schema>
The section in red is currently not valid.Is there an easy way to do this, or a way at all?ThanksHearty head pats