2014-09-25 47 views
0

是否有可能使用sql在xml中創建主鍵和外鍵標籤? 像如何在xml中使用sql定義PK?

<Column Name="ID" DataType="INTEGER" IsPrimaryKey="true" /> 
    <ForeignKey SourceTable="Product" TargetTable="Market"> 
    <ColumnMap Source="ID" Target="ID" Ordinal="1" /> 
    </ForeignKey> 

我用下面的一部分,但它並沒有顯示PK和FK部分:

select COLUMN_NAME as '@Name', 
      Data_type as '@DataType', 
      character_octet_length as '@Length' 
      FROM information_schema.COLUMNS 
    FOR XML PATH ('Column'), TYPE 

回答

0

記住的重要一點是,主鍵和外鍵在表級別定義,而不是針對單個列,這可能會導致非常複雜的查詢來構建所需的數據。例如,很可能有一個主鍵覆蓋多個字段;在一個列被定義爲除了它所屬的表之外的大量表的外鍵上也很常見。

考慮到這一點 - 而且,由於時間的限制 - 以下只處理主鍵,並且我只測試了單列主鍵:

SELECT c.COLUMN_NAME as '@Name', 
     c.TABLE_NAME as '@Table', 
     Data_type as '@DataType', 
     character_octet_length as '@Length', case when tc.CONSTRAINT_NAME IS NULL then 'false' else 'true' end as '@IsPrimaryKey' 
    FROM information_schema.COLUMNS c 
     left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on c.TABLE_NAME = kcu.TABLE_NAME and kcu.COLUMN_NAME = c.COLUMN_NAME 
     left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME and tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
    FOR XML PATH ('Column'), TYPE 

爲清楚起見,我已經在輸出中包含表名。示例輸出:

<Column Name="AdministratorID" Table="Administrator" DataType="int" 
    IsPrimaryKey="true" /><Column Name="UserName" Table="Administrator" 
    DataType="varchar" Length="50" IsPrimaryKey="false" /><Column Name= 
    ... 

我意識到這並不完全符合您的要求,但它應該給你一些東西來建立。

+0

但它顯示數據庫的所有列而不是表格的特定列 – SaNa3819 2014-09-25 12:27:33

+0

儘管如此,您的原始查詢似乎也不受限於單個表。 – 2014-09-25 12:37:55

+0

我解決了這個問題。 你能告訴我如何創建FK部分? – SaNa3819 2014-09-25 16:53:06