【问题标题】:Export database schema into XML file将数据库模式导出到 XML 文件
【发布时间】:2016-08-11 08:08:38
【问题描述】:

我想将整个数据库模式导出到 XML 文件。那里有什么需要的信息。

  1. 表格 - 列、数据类型、pk、fk、
  2. 视图 - 返回的列,
  3. 函数和存储过程 - 参数、返回的列和数据类型。

我在 Google 等中找不到任何东西...有人曾经遇到过类似的问题吗?

【问题讨论】:

  • 您可以将所有这些内容编写成脚本,然后将它们转换为 xml?到目前为止,您尝试过什么?
  • 我的 SQL 不太好。到目前为止,我发现了如何使用表来实现,但我还需要视图、函数和 SP。

标签: sql-server xml tsql sql-server-2012


【解决方案1】:

通过此查询,您可以获得表和视图:

SELECT TABLE_NAME AS '@Name', CASE WHEN TABLE_TYPE = 'BASE TABLE' THEN 'Table' ELSE 'View' END AS '@Type',
(
    SELECT Column_Name as '@Name',
            DATA_TYPE as '@DataType',
            case data_type 
                when 'nvarchar' 
                then CHARACTER_MAXIMUM_LENGTH 
                when 'varchar'  
                then CHARACTER_MAXIMUM_LENGTH
                else null 
            end  as '@Length',
            IS_NULLABLE AS '@IsNullable',
            COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), COLUMN_NAME, 'IsIdentity') AS '@IsIdentity',

            (SELECT tc.CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu ON tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME
WHERE tc.TABLE_NAME = INFORMATION_SCHEMA.COLUMNS.TABLE_NAME AND cu.COLUMN_NAME = INFORMATION_SCHEMA.COLUMNS.Column_Name) AS '@Constraint'

    FROM INFORMATION_SCHEMA.COLUMNS 
    where INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = 
        INFORMATION_SCHEMA.TABLES.TABLE_NAME
    order by INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
    For XML PATH ('Column'), type
)

FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbo'
ORDER BY TABLE_NAME ASC  
For XML PATH ('Table'),Root('Tables')

这适用于 sps 和 fns。

 SELECT
      SPECIFIC_SCHEMA     AS '@ObjectSchema'
      ,ROUTINE_NAME       AS '@ObjectName'
      ,ROUTINE_TYPE       AS '@ObjectType'
      ,ROUTINE_DEFINITION AS '@TEXT'
FROM  INFORMATION_SCHEMA.ROUTINES 
WHERE   (ROUTINE_TYPE = 'function' OR ROUTINE_TYPE = 'procedure')
For XML PATH ('Object') , TYPE, ROOT('Objects') 

希望对你有所帮助。

【讨论】:

  • 对于第一个查询,我收到以下错误,消息 512,级别 16,状态 1,第 1 行子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。如何解决?
【解决方案2】:

您可以在 Visual Studio 中使用实体数据建模

使用 XML 文本编辑器打开创建的 .edmx 文件,或者您喜欢或需要的文件。 好消息是您可以从 .edxm 文件(在 Visual Studio 中)生成数据库模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多