SQL--比较两个数据库的表结构
2017-05-22 15:21
363 查看
在开发过程中,经常会遇到测试数据库和正式数据库的表结构不一致的情况
今天总结一下我的解决办法
sysobjects
syscolumns
systypes
syscomments
今天总结一下我的解决办法
USE Test_1 DECLARE @tableCount INT SELECT @tableCount = COUNT(1) FROM [sysobjects] WHERE [xtype] = 'U' --将此数据库中的所有表名插入到临时表中 SELECT IDENTITY(INT,1,1) AS ID, [name] INTO #TmpTable FROM [sysobjects] WHERE [xtype] = 'U' ORDER BY [name] --SELECT * FROM #TmpTable DECLARE @tableName VARCHAR(100) DECLARE @tableIndex INT SET @tableIndex = 1 WHILE @tableIndex <= @tableCount BEGIN SELECT @tableName = Name FROM #TmpTable WHERE ID = @tableIndex SET @tableIndex = @tableIndex + 1 --测试库 USE Test_1 SELECT SO.[name] AS TableName ,SC.[name] AS ColumnName ,ST.[name] AS ColumnType ,COLUMNPROPERTY(SC.[id], SC.[name], 'PRECISION') AS ColumnLength ,CASE SC.[isnullable] WHEN 1 THEN '√' ELSE '' END AS IsAllowNull ,ISNULL(SCM.text, '') AS DefaultValue INTO #TmpTable1 FROM [syscolumns] SC JOIN [sysobjects] SO ON SO.id = SC.id AND SO.[xtype] = 'U' LEFT JOIN [systypes] ST ON ST.[xusertype] = SC.[xtype] LEFT JOIN [syscomments] SCM ON SCM.[id] = SC.[cdefault] WHERE SO.[name] = @tableName ORDER BY SC.[colid] --正式库 USE Test_2 SELECT SC.[name] AS ColumnName ,ST.[name] AS ColumnType ,COLUMNPROPERTY(SC.[id], SC.[name], 'PRECISION') AS ColumnLength ,CASE SC.[isnullable] WHEN 1 THEN '√' ELSE '' END AS IsAllowNull ,ISNULL(SCM.text, '') AS DefaultValue INTO #TmpTable2 FROM [syscolumns] SC JOIN [sysobjects] SO ON SO.id = SC.id AND SO.[xtype] = 'U' LEFT JOIN [systypes] ST ON ST.[xusertype] = SC.[xtype] LEFT JOIN [syscomments] SCM ON SCM.[id] = SC.[cdefault] WHERE SO.[name] = @tableName ORDER BY SC.[colid] IF EXISTS ( SELECT * FROM #TmpTable1 A FULL OUTER JOIN #TmpTable2 B ON A.ColumnName = B.ColumnName WHERE A.ColumnName <> B.ColumnName OR A.ColumnType <> B.ColumnType OR A.ColumnLength <> B.ColumnLength OR A.IsAllowNull <> B.IsAllowNull OR A.DefaultValue <> B.DefaultValue OR A.ColumnName IS NULL OR B.ColumnName IS NULL ) SELECT * FROM #TmpTable1 A FULL OUTER JOIN #TmpTable2 B ON A.ColumnName = B.ColumnName WHERE A.ColumnName <> B.ColumnName OR A.ColumnType <> B.ColumnType OR A.ColumnLength <> B.ColumnLength OR A.IsAllowNull <> B.IsAllowNull OR A.DefaultValue <> B.DefaultValue OR A.ColumnName IS NULL OR B.ColumnName IS NULL DROP TABLE #TmpTable1 DROP TABLE #TmpTable2 END DROP TABLE #TmpTable
sysobjects
syscolumns
systypes
syscomments
相关文章推荐
- SQL - 比较两个数据库的Schema 表结构
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异
- 比较两个数据库表结构的差异
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异(ZT)
- SQL语句:在两个数据库间复制表结构和数据数据库
- 比较两个数据库的表结构差异
- SQL语句:在两个数据库间复制表结构和数据数据库
- 比较两个数据库的表结构差异
- 转:邹建--比较两个数据库的表结构差异2
- sql 比较两数据库结构的差异
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异
- 比较两个数据库表结构的差异
- 比较两个数据库的结构(只比较表名是否相同)
- 比较两个数据库的表结构差异
- sql 实现将远程数据库中的表记录插入本地数据库的表内。这两个数据库的表的结构是致的
- 使用PL/SQL Developer来同步两个数据库中相同表的结构
- 比较两个数据库的表结构差异