比较两个数据库之间的列比较

问题描述:

我有一个生产数据库和一个dev数据库,在某些表中的一列或多列上显然有不同的排序规则。有没有一种方法可以编写脚本来返回哪些列是不同的?比较两个数据库之间的列比较

+0

您是否拥有Visual Studio 2010+?它内置了Schema Compare工具,可以找到两个数据库之间表结构的所有差异。 – mellamokb 2013-03-12 15:00:09

+0

我不知道我是否有+版本可用。它在2010年标准版中不可用? – 2013-03-12 15:16:53

+0

我的意思是2010版或更高版本(即2012年)。我不知道它是否在标准版中可用,但是您可以检查并查看是否有“数据”菜单,并带有“模式比较...”选项。 – mellamokb 2013-03-12 15:54:17

Red-Gate SQL Compare将突出显示校验差异。有很多其他各种成本和质量的替代工具,其中I blogged about here,但我可以保证红门工具的质量。如果这是一次性的事情,你可以使用试用版。

这就是说,如果数据库在同一台服务器上,或者其中一台服务器有一个链接的服务器到另一个,你可以做这样的事情:

SELECT DevObject = do.name, DevColumn = dc.name, DevColl = dc.collation_name, 
     ProdObject = po.name, ProdColumn = pc.name, ProdColl = pc.collation_name 
FROM devdb.sys.objects AS do 
INNER JOIN devdb.sys.schemas AS ds 
    ON do.[schema_id] = ds.[schema_id] 
INNER JOIN devdb.sys.columns AS dc 
    ON do.[object_id] = dc.[object_id] 
INNER JOIN productiondb.sys.objects AS po 
    ON do.name = po.name 
INNER JOIN productiondb.sys.schemas AS ps 
    ON ds.name = ps.name 
    AND po.[schema_id] = ps.[schema_id] 
INNER JOIN productiondb.sys.columns AS pc 
    ON dc.name = pc.name 
    AND po.[object_id] = pc.[object_id] 
WHERE 
    dc.collation_name <> pc.collation_name 
    -- AND do.name IN (N't1', N't2', N't3', ...) -- filter certain table names 
; 

如果他们是在不同的服务器您可能需要在其中创建一个链接服务器,然后将引用适当地更改为包含4部分的名称,例如linkedservername.devdb.sys.objects等。

+0

谢谢!我之前使用过Red-Gate SQL Compare来比较缺失的表,但我没有意识到它也可以用于校对差异。不幸的是我认为我的试用期已过期。我真的在寻找tsql代码。再次感谢! – 2013-03-12 15:16:17