比较不同环境中的表以了解列更改
Compare tables in different environments for column changes
所以我有两个环境测试和生产。
我在两个环境中的 table 相同。两个 table 都有很多列。
如何检查一个 table 中是否有任何列在另一个 table 中,而不单独比较它们?有什么技巧或提示吗?
我试过
SELECT t.name as table_name,
SCHEMA_NAME(schema_ID) as schema_name,
c.name as column_name
from sys.tables as t
inner join sys.columns c on t.object_ID = c.object_ID
WHERE t.name like '834daily%'
但它没有return任何东西。
两个 SQL 数据库在不同的服务器上,.100
是测试,.110
是生产。
我确信在 SQL 中有一个简单的方法可以做到这一点,但不确定最佳方法。我也做过一些事情,比如写出 CREATE TABLE
语句,但我永远无法将它们放在一起进行直接比较。这可能吗?
你可能会这样做:
链接服务器:
--find your both test and prod server name by running query below
select * from sys.servers
--query to find column name that exists in one environment and not in other
--replace SERVERNAME AND DATABASENAME as needed
SELECT COLUMN_NAME
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS prod
WHERE TABLE_NAME = 'YourTableName'
AND NOT EXISTS (
SELECT 1
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS test
WHERE prod.TABLE_NAME = test.TABLE_NAME);
未链接的服务器:
--replace SERVERNAME AND DATABASENAME to match yours
SELECT COLUMN_NAME
FROM (
SELECT COLUMN_NAME
,TABLE_NAME
FROM OPENROWSET('SQLNCLI', 'Server=SERVERNAME;Trusted_Connection=yes;',
'SELECT COLUMN_NAME,TABLE_NAME FROM DATABASENAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ''YOURTABLENAME''')
) AS prod
WHERE NOT EXISTS (
SELECT 1
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS test
WHERE prod.TABLE_NAME = test.TABLE_NAME
);
所以我有两个环境测试和生产。
我在两个环境中的 table 相同。两个 table 都有很多列。
如何检查一个 table 中是否有任何列在另一个 table 中,而不单独比较它们?有什么技巧或提示吗?
我试过
SELECT t.name as table_name,
SCHEMA_NAME(schema_ID) as schema_name,
c.name as column_name
from sys.tables as t
inner join sys.columns c on t.object_ID = c.object_ID
WHERE t.name like '834daily%'
但它没有return任何东西。
两个 SQL 数据库在不同的服务器上,.100
是测试,.110
是生产。
我确信在 SQL 中有一个简单的方法可以做到这一点,但不确定最佳方法。我也做过一些事情,比如写出 CREATE TABLE
语句,但我永远无法将它们放在一起进行直接比较。这可能吗?
你可能会这样做:
链接服务器:
--find your both test and prod server name by running query below
select * from sys.servers
--query to find column name that exists in one environment and not in other
--replace SERVERNAME AND DATABASENAME as needed
SELECT COLUMN_NAME
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS prod
WHERE TABLE_NAME = 'YourTableName'
AND NOT EXISTS (
SELECT 1
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS test
WHERE prod.TABLE_NAME = test.TABLE_NAME);
未链接的服务器:
--replace SERVERNAME AND DATABASENAME to match yours
SELECT COLUMN_NAME
FROM (
SELECT COLUMN_NAME
,TABLE_NAME
FROM OPENROWSET('SQLNCLI', 'Server=SERVERNAME;Trusted_Connection=yes;',
'SELECT COLUMN_NAME,TABLE_NAME FROM DATABASENAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ''YOURTABLENAME''')
) AS prod
WHERE NOT EXISTS (
SELECT 1
FROM SERVERNAME.DATABASENAME.INFORMATION_SCHEMA.COLUMNS test
WHERE prod.TABLE_NAME = test.TABLE_NAME
);