2010-08-13 86 views
0

我想知道如何在SQL Server中創建表格模式並從中生成XML文檔。理想的是,如果我在數據庫名稱傳遞(「SalesOrders表」)和XML文檔自帶反讀取類似:從SQL Server 2005生成XML格式的表模式?

<table=」SalesOrders」> 
<columns> 
    <name=」SalesOrderID」/> 
     <datatype=」int」/> 
     <allowNulls=」false」/> 
    </name> 
    <name=」DateOfSale」> 
     <datatype=」DateTime」/> 
     <allowNulls=」false」/> 
    </name> 
</columns> 
</table> 

你的想法。沿着這些線,XSD架構也可以。在我的腦海裏,我認爲SQL Server有這樣做的機制,但我並不積極。非常感謝您的建議。

回答

1

像下面會工作。另外請注意,您的示例XML格式不正確。我冒昧地把它做好。

declare @tableName varchar(255) 

select @tableName = 'SalesOrders' 

select (
    select column_name, 
      data_type, 
      case(is_nullable) 
       when 'YES' then 'true' 
       else 'false'  
      end as is_nullable 
    from information_schema.columns [columns] 
    where table_name = @tableName 
    for xml auto, type 
).query (' <table name="{sql:variable("@tableName")}"> 
      { 
       for $column in /columns 
       return 

       <column name="{data($column/@column_name)}"> 
        <dataType value="{data($column/@data_type)}"/> 
        <allowNulls value="{data($column/@is_nullable)}"/> 
       </column> 
      } 
      </table>    
') 

select @tableName as "@name", 
(
    select column_name as "@name", 
     data_type as "dataType/@value", 
     case(is_nullable) 
      when 'YES' then 'true' 
      else 'false'  
     end as "allowNulls/@value" 
    from information_schema.columns 
    where table_name = @tableName 
    for xml path('column'), type 
) 
for xml path('table') 

兩個查詢會產生如下:

<table name="SalesOrders"> 
<columns> 
    <column name="SalesOrderID"> 
     <datatype value="int"/> 
     <allowNulls value="false"/> 
    </column > 
    <column name="DateOfSale"> 
     <datatype value="DateTime"/> 
     <allowNulls value="false"/> 
    </column > 
</columns> 
</table> 

作爲一個方面說明:

雖然它通常是一個決定的時候品味的問題元素與XML結構中的屬性,我會做dataTypeallowNulls attribtes而不是元素,這對我來說似乎更直觀。因此,XML結構看起來像這樣:

<table name="SalesOrders">  
    <columns>  
     <column name="SalesOrderID" datatype="int" allowNulls="false"/> 
     <column name="DateOfSale" datatype="DateTime" allowNulls="false"/> 
    </columns>  
</table> 

上述查詢可以很容易地修改以反映這種變化。

+0

非常感謝您的建議。 – larryq 2010-08-16 16:38:54

1

如何

Select * From Information_Schema.Columns For XML Auto