#sql #sql-server #tsql
Вопрос:
У меня два стола. A содержит данные, а B содержит объяснение столбцов для A
Select * from tableA
|ID | A | B | C |
|---|---|---|---|
|1 | ? | ? | ? |
|2 | ? | ? | ? |
|3 | ? | ? | ? |
|4 | ? | ? | ? |
|5 | ? | ? | ? |
Select * from tableB
|col| Desc |
|---|--------|
|A | Value1 |
|B | Value2 |
|C | Value3 |
Результат, который я хотел бы получить
|ID | Value1 | Value2 | Value3 |
|---|--------|--------|--------|
|1 | ? | ? | ? |
|2 | ? | ? | ? |
|3 | ? | ? | ? |
|4 | ? | ? | ? |
|5 | ? | ? | ? |
Есть ли возможность переименовать столбцы с помощью скрипта вместо этого, используя следующий код? Поскольку столбцов более 40, и у меня есть несколько таблиц, которые нужно преобразовать в представление, это не очень хорошая практика для создания и поддержания представления
Select A as Value1, B as Value2, C as Value3 From TableA
Я попытался использовать разные ключевые слова для поиска в Google, однако в результате все они были переименованы вручную. Может быть, это потому, что я использую неправильные ключевые слова
Заранее спасибо
Комментарии:
1. В соответствии с руководством по вопросам, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или в другом месте) и почему это не соответствует вашим потребностям. И, пожалуйста, не публикуйте изображения кода, данных, сообщений об ошибках и т. Д. — Скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.
2. Из того, что вы описали, вам нужно будет использовать динамический SQL. Но как вы вообще попали в этот сценарий ?
3. @Белка Моя компания использует продукт Oracle. Я получил доступ к базе данных несколько дней назад после того, как мой коллега ушел в отставку. Я думаю, что эта структура именования предназначена для покрытия конфиденциальных данных и для согласованности имен~
Ответ №1:
Вам нужно сформировать Dynamic Query
и затем выполнить его с помощью sp_executesql
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = STRING_AGG(QUOTENAME(col) ' AS ' QUOTENAME([Desc]), ',')
FROM tableB;
SELECT @sql = 'SELECT ID, '
@sql
' FROM tableA';
PRINT @sql;
EXEC sp_executesql @sql;
Ответ №2:
Сначала спасибо за ответ @Squirrel. Однако STRING_AGG
он несовместим с TSQL.
То, как я решаю, чем-то похоже на него.
DECLARE @query NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = COALESCE(@sql ',', '') col ' AS ' QUOTENAME(DESCR)
FROM tableB;
SELECT @query= 'SELECT ' @sql ' FROM tableA';
PRINT(@query);
EXEC(@query);