我最近已经完成了从某些应用程序的真正旧版本到当前版本的迁移,并且在迁移数据库时遇到了一些问题。
我需要一个查询,可以帮助我比较两个表中的列。我的意思是不是行中的数据,我需要比较列本身以找出我错过的表结构中的哪些变化。
看看Red Gate SQL比较
否则,这是一个开始(适用于SQL Server)
select so.name as [table], sc.name as [column], sc.type, sc.length, sc.prec, sc.scale, sc.collation from sysobjects so inner join syscolumns sc ON so.id = sc.id where so.type='u' order by so.name, sc.colorder
你可以看看
- INFORMATION_SCHEMA.TABLES - INFORMATION_SCHEMA.COLUMNS - INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS - INFORMATION_SCHEMA.TABLE_CONSTRAINTS - INFORMATION_SCHEMA.KEY_COLUMN_USAGE
表,如果你想更深入..
[更新]
使用INFORMATION_SCHEMA表
SELECT [table].TABLE_NAME AS [Table_Name], [column].COLUMN_NAME AS [Column_Name], COLUMNPROPERTY(object_id([table].[TABLE_NAME]), [column].[COLUMN_NAME], 'IsIdentity') AS [identity], [column].DATA_TYPE AS [datatype], [column].CHARACTER_MAXIMUM_LENGTH AS [Character_Length], [column].NUMERIC_PRECISION AS Numeric_precision, [column].ORDINAL_POSITION AS [order], [column].COLUMN_DEFAULT AS [defaultvalue], [column].IS_NULLABLE AS [nullable] FROM INFORMATION_SCHEMA.TABLES [table] INNER JOIN INFORMATION_SCHEMA.COLUMNS [column] ON [table].TABLE_NAME = [column].TABLE_NAME WHERE [table].TABLE_TYPE = 'BASE TABLE' AND [table].TABLE_NAME <> 'sysdiagrams' ORDER BY [table].TABLE_NAME ASC, [column].ORDINAL_POSITION ASC