UNION查询中的排序规则问题

时间:2018-07-04 21:20:47

标签: sql sql-server collation

我正在一个项目上,我的任务是创建一系列的Union查询,以编译来自具有相同结构的不同数据库的数据。这些查询中的某些查询非常宽,包含大量列。不,我不能更改列数。当我尝试创建查询时,它给出了归类错误。通过添加到该列中的以下命令,我可以轻松解决该问题:

收集DATABASE_DEFAULT

现在,问题是我必须对50个或6个不同的数据库和200多个列使用UNION进行50多个查询。每次我将该命令添加到列中时,我还必须在列中添加别名,否则我会丢失名称。有没有办法在不必向每列添加COLLATE子句的情况下找到更有效的方法的想法?

1 个答案:

答案 0 :(得分:2)

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

  1. 将要选择的每个表格列放在单独的行上,并对齐点。
  2. 在第一行SELECT上键入空格,直到将“ cursor”(管道符号)放在下面,以便该行成为所有具有列名称的行中最长的行:
SELECT P .AB    |
     , QR.CDEFG
     , S .HIJK
FROM P
JOIN QR ON ...
-- etc
  1. 将光标放在该位置,按 ALT - Shift -,直到到达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 -向右/向下或使用 Alt ,精确选择下面显示的文本。 kbd>并拖动鼠标:
AB   
CDEFG
HIJK 
  1. 使用 Copy ,然后在第一行末尾粘贴文本块,结果如下:
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/