UNION 查询中的排序规则问题



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

整理DATABASE_DEFAULT

现在,问题是我必须对 50+ 个不同的数据库和 200+ 列进行 50+ 次查询,每个查询都有 UNION。每次将该命令添加到列时,我还必须向列添加别名,否则我将丢失名称。是否有更有效的方法可以做到这一点而不必将 COLLATE 子句添加到每一列,有什么想法吗?

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

  1. 将要选择的每个表列放在单独的行上,并将点对齐。
  2. 在第一行 SELECT 上,键入空格,直到我将"光标"(管道符号(放在下面,以便该行成为所有带有列名的行中最长的:
SELECT P .AB    |
, QR.CDEFG
, S .HIJK
FROM P
JOIN QR ON ...
-- etc
  1. 将光标放在该位置时,按Alt-Shift-down直到到达 SELECT 行的最后一行,这将为您提供一个高大的多行光标
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. 现在准确地选择下面显示的文本,要么使用Alt-Shift-right-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/

最新更新