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

Sql server 比较两个数据库之间的列排序规则,sql-server,tsql,Sql Server,Tsql,我有一个生产数据库和一个dev数据库,它们显然对某些表中的一个或多个列具有不同的排序规则。是否有一种方法可以编写脚本,返回不同的列 将突出显示排序规则差异。有很多其他不同成本和质量的替代工具,但我可以保证红门工具的质量。如果这是一次性的,你可以使用试用版 也就是说,如果数据库位于同一台服务器上,或者其中一台服务器与另一台服务器有链接,则可以执行以下操作: SELECT DevObject = do.name, DevColumn = dc.name, DevColl = dc.collat

我有一个生产数据库和一个dev数据库,它们显然对某些表中的一个或多个列具有不同的排序规则。是否有一种方法可以编写脚本,返回不同的列

将突出显示排序规则差异。有很多其他不同成本和质量的替代工具,但我可以保证红门工具的质量。如果这是一次性的,你可以使用试用版

也就是说,如果数据库位于同一台服务器上,或者其中一台服务器与另一台服务器有链接,则可以执行以下操作:

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等。

将突出显示排序规则的差异。有很多其他不同成本和质量的替代工具,但我可以保证红门工具的质量。如果这是一次性的,你可以使用试用版

也就是说,如果数据库位于同一台服务器上,或者其中一台服务器与另一台服务器有链接,则可以执行以下操作:

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等。

您有Visual Studio 2010+?它有内置的模式比较工具,可以找到两个数据库之间表结构的所有差异。我不知道是否有+版本可用。2010标准版中没有吗?我只是指2010版或更高版本,即2012版。我不知道它是否在标准版中可用,但您可以检查并查看是否有带有“模式比较”选项的数据菜单……是否有Visual Studio 2010+?它有内置的模式比较工具,可以找到两个数据库之间表结构的所有差异。我不知道是否有+版本可用。2010标准版中没有吗?我只是指2010版或更高版本,即2012版。我不知道它是否在标准版中可用,但您可以检查并查看是否有带有“模式比较”选项的数据菜单…谢谢!我以前使用过红门SQL比较来比较缺少的表,但我没有意识到它也可以用于排序差异。不幸的是,我想我的试用期已经过了。我真的在寻找tsql代码。再次感谢!谢谢我以前使用过红门SQL比较来比较缺少的表,但我没有意识到它也可以用于排序差异。不幸的是,我想我的试用期已经过了。我真的在寻找tsql代码。再次感谢!