比较两个数据库之间的列排序规则

Geo*_*wdy 1 t-sql sql-server

我有一个生产数据库和一个开发数据库,​​显然在某些表的一列或多列上有不同的排序规则.有没有一种方法可以编写一些可以返回哪些列不同的脚本?

Aar*_*and 5

Red-Gate SQL Compare将突出显示排序规则差异.还有很多其他不同成本和质量的替代工具,我在这里写博客,但我可以保证Red-Gate工具的质量.如果这是一次性的事情,您可以使用试用版.

也就是说,如果数据库在同一台服务器上,或者其中一台服务器与另一台服务器有链接服务器,您可以这样做:

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
;
Run Code Online (Sandbox Code Playgroud)

如果它们位于不同的服务器上,您可能需要在一个服务器上创建链接服务器,然后将引用适当地更改为4个部分名称,比如说linkedservername.devdb.sys.objects等.