UNION 查询中的排序规则问题

Collation issue in UNION Query

我正在从事一个项目,我的任务是创建一系列联合查询来编译来自具有相同结构的不同数据库的数据。其中一些查询范围很广,列数很多。不,我无法更改列数。当我尝试创建查询时,它给出了排序规则错误。我可以通过将此命令添加到列中轻松解决该问题:

整理DATABASE_DEFAULT

现在,问题是我必须对 5 或 6 个不同的数据库和 200 多个列执行 50 多个查询,每个查询都使用 UNION。每次我将该命令添加到该列时,我还必须为该列添加一个别名,否则我会丢失名称。如果有更有效的方法来执行此操作而不必将 COLLATE 子句添加到每一列,您有什么想法吗?

您可以利用 SSMS 列编辑模式。这是它的工作原理。

  1. 将您想要 select 的每个 table 列放在单独的行上,并对齐点。
  2. 在第一个 SELECT 行,键入空格直到我在下面放置 "cursor"(竖线符号)的位置,这样该行就成为所有具有列名的行中最长的:
SELECT P .AB    |
     , QR.CDEFG
     , S .HIJK
FROM P
JOIN QR ON ...
-- etc
  1. 将光标放在该位置,按 ALT-Shift-down 直到您到达 SELECT 行的最后一行,这会给你一个 tall 多行光标:
SELECT P .AB    |
     , QR.CDEFG |
     , S .HIJK  |
FROM P
JOIN QR ON ...
  1. 现在键入(或粘贴)COLLATE DATABASE_DEFAULT AS,此文本将立即出现在所有行中:
SELECT P .AB    COLLATE DATABASE_DEFAULT AS |
     , QR.CDEFG COLLATE DATABASE_DEFAULT AS |
     , S .HIJK  COLLATE DATABASE_DEFAULT AS |
FROM P
JOIN QR ON ...
  1. 现在 select 完全是下面显示的文本,使用 Alt-Shift-right/down,或者在拖动鼠标的同时使用Alt
AB   
CDEFG
HIJK 
  1. 使用复制然后粘贴第一行末尾的文本块,结果如下:
SELECT P .AB    COLLATE DATABASE_DEFAULT AS AB   
     , QR.CDEFG COLLATE DATABASE_DEFAULT AS CDEFG
     , S .HIJK  COLLATE DATABASE_DEFAULT AS HIJK 
FROM P
JOIN QR ON ...

有关这方面的更多信息,请参见例如https://blog.sqlauthority.com/2016/06/06/sql-server-vertical-select-mode-feature-sql-server-management-studio/