我正在做一个项目,我的任务是创建一系列联合查询,以编译来自不同数据库的数据,具有相同的结构。其中一些查询非常广泛,具有大量列。不,我无法更改列数。当我尝试创建查询时,它给出了排序规则错误。我可以通过将此命令添加到列中轻松解决此问题:
整理DATABASE_DEFAULT
现在,问题是我必须对 50+ 个不同的数据库和 200+ 列进行 50+ 次查询,每个查询都有 UNION。每次将该命令添加到列时,我还必须向列添加别名,否则我将丢失名称。是否有更有效的方法可以做到这一点而不必将 COLLATE 子句添加到每一列,有什么想法吗?
可以利用 SSMS 列编辑模式。这是它的工作原理。
- 将要选择的每个表列放在单独的行上,并将点对齐。
- 在第一行 SELECT 上,键入空格,直到我将"光标"(管道符号(放在下面,以便该行成为所有带有列名的行中最长的:
SELECT P .AB |
, QR.CDEFG
, S .HIJK
FROM P
JOIN QR ON ...
-- etc
- 将光标放在该位置时,按Alt-Shift-down,直到到达 SELECT 行的最后一行,这将为您提供一个高大的多行光标:
SELECT P .AB |
, QR.CDEFG |
, S .HIJK |
FROM P
JOIN QR ON ...
- 现在键入(或粘贴(
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 ...
- 现在准确地选择下面显示的文本,要么使用Alt-Shift-right-right/down,要么在拖动鼠标时使用Alt:
AB
CDEFG
HIJK
- 使用"复制",然后将文本块粘贴到第一行的末尾,结果如下:
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/