[英]how to create XML schema from an existing database in SQL Server 2008
有沒有辦法從 SQL Server 2008、SQL Server Management Studio 中的現有數據庫創建 XML 架構?
我有一個大約有 50 個表的數據庫。 我希望創建一個“漂亮”的圖表來顯示這些表之間的關系。 使用另一個名為 SQL Designer ( https://code.google.com/p/wwwsqldesigner/ ) 的應用程序將為我提供“漂亮”的圖片,但我不知道如何創建所需的 XML 模式。
我在論壇(和 MS)上進行了搜索,但找不到我的答案。 我可以找到創建數據庫的工具,但我正在反其道而行之……我需要一張漂亮的圖片,以圖表形式顯示數據庫。 我想如果我可以將我的數據庫結構轉換為 XML,那么 SQL Designer 將為我完成剩下的工作。
感謝您的幫助。
缺口
如果您只需要表的 xml 架構,請使用以下命令查詢它們:
select top 0 * FROM daTable FOR XML AUTO,XMLSCHEMA
如果您需要表名和列來創建數據庫的表示以及表的連接方式,您可以使用以下內容:
SELECT
s.name as '@Schema'
,t.name as '@Name'
,t.object_id as '@Id'
,(
SELECT c.name as '@Name'
,c.column_id as '@Id'
,IIF(ic.object_id IS NOT NULL,1,0) as '@IsPrimaryKey'
,fkc.referenced_object_id as '@ColumnReferencesTableId'
,fkc.referenced_column_id as '@ColumnReferencesTableColumnId'
FROM sys.columns as c
LEFT OUTER JOIN sys.index_columns as ic
ON c.object_id = ic.object_id
AND c.column_id = ic.column_id
AND ic.index_id = 1
LEFT OUTER JOIN sys.foreign_key_columns as fkc
ON c.object_id = fkc.parent_object_id
AND c.column_id = fkc.parent_column_id
WHERE c.object_id = t.object_id
FOR XML PATH ('Column'),TYPE
)
FROM sys.schemas as s
INNER JOIN sys.tables as t
ON s.schema_id = t.schema_id
FOR XML PATH('Table'),ROOT('Tables')
讓您的應用程序使用 ColumnReferencesTableId 和 ColumnReferencesTableColumnId 來獲取表關系。 如果您更喜歡寫出它們的名稱,您還可以進一步加入引用的列和表,但我認為它們的 ID 就足夠了。
結合通過 INFORMATION_SCHEMA 或 sysobjects 運行的游標,以下內容應該對您有所幫助:
SELECT * FROM [MyTable] FOR XML AUTO, XMLSCHEMA
我不確定您是否可以簡單地將它應用到整個數據庫,或者需要什么后處理工作來組合所有各種表模式,但它是可以使用的。
試試這個(這個答案的變體):
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
EXEC('
DECLARE @schema xml
SET @schema = (SELECT TOP 0 * FROM ' +
@listStr +
' FOR XML AUTO, ELEMENTS, XMLSCHEMA(''DbSchema''))
SELECT @schema
');
替換行:
,**IIF**(ic.object_id IS NOT NULL,1,0) as '@IsPrimaryKey'
有了這個:
,CASE WHEN ic.object_id IS NOT NULL THEN 1 ELSE 0 END AS '@IsPrimaryKey'
for MS SQL server versions not allowing the IIF function.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.