Проблема сопоставления в запросе UNION - PullRequest
0 голосов
/ 05 июля 2018

Я работаю над проектом, в котором мне поручено создать серию запросов Union для компиляции данных из разных баз данных с одинаковой структурой. Некоторые из этих запросов очень широки с большим количеством столбцов. И нет, я не могу изменить количество столбцов. Когда я пытался создать запрос, он дает ошибку сортировки. Я могу решить это легко с помощью этой команды, добавленной в столбец:

COLLATE DATABASE_DEFAULT

Теперь проблема в том, что мне нужно выполнить более 50 запросов каждый с UNIONs к 5 или 6 различным базам данных и 200+ столбцам. Каждый раз, когда я добавляю эту команду в столбец, мне также приходится добавлять псевдоним в столбец, иначе я теряю имя. Есть идеи, если есть более эффективный способ сделать это без необходимости добавлять предложение COLLATE в каждый столбец?

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете воспользоваться режимом редактирования колонок SSMS. Вот как это будет работать.

  1. Поместите каждый столбец таблицы, который вы хотите выбрать , в отдельной строке и выровняйте точки.
  2. В первой строке SELECT введите пробелы, пока я не поставлю «курсор» (символ канала) ниже, чтобы эта строка стала самой длинной из всех строк с именами столбцов:
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 при перетаскивании мышь:
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/

...