【问题标题】:SQL Server 2008 Compare two different database tables for column name, data type and lengthSQL Server 2008 比较两个不同的数据库表的列名、数据类型和长度
【发布时间】:2018-04-19 18:26:30
【问题描述】:

我使用的是 SQL Server 2008 R2。

我创建了两个不同的数据库Master 和Test。它们一开始都有相同的表和列,但后来master 用于一些稳定的环境,test 被我用于持续开发。

现在由于开发,我更改了一些列的数据类型,向表中添加了一些新列,删除了一些列,添加了一些新表并删除了。现在我想让Master 与test 相同。我无法删除并重新创建 Master,因为它包含一些敏感的实时数据。所以我需要比较master 和test 的每个表以及列名、数据类型、约束和长度。有什么解决办法吗?

【问题讨论】:

标签: sql sql-server-2008


【解决方案1】:

我自己解决了:

SELECT  
    T.[name] AS [table_name], AC.[name] AS [column_name],  
        TY.[name] AS system_data_type
FROM    [master].sys.[tables] AS T  
    INNER JOIN [master].sys.[all_columns] AC ON T.[object_id] = AC.[object_id] 
    INNER JOIN [master].sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id]

EXCEPT

SELECT  
    T.[name] AS [table_name], AC.[name] AS [column_name],  
        TY.[name] AS system_data_type
FROM    test.sys.[tables] AS T  
    INNER JOIN test.sys.[all_columns] AC ON T.[object_id] = AC.[object_id] 
    INNER JOIN test.sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id]

这将为您提供列的列表以及表名、列名和数据类型,这些在 master 但不存在或与 test 不同。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 在这个项目中显示错误。 Error :An exception occurred while executing a Transact-SQL statement or batch.
    猜你喜欢
    • 2011-11-28
    • 2013-12-04
    • 1970-01-01
    • 2013-07-18
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多