Как мне переименовать столбец на основе переменной

#sql-server #tsql #rename

#sql-server #tsql #переименовать

Вопрос:

Я хочу переименовать столбец в конце серии запросов на основе переменной. Он будет выполнять что-то вроде этого:

  DECLARE @formTable TABLE (FormID varchar(max))
    INSERT @formTable SELECT 'Form1'AS FormID;
    INSERT @formTable SELECT 'Form2'AS FormID;
    INSERT @formTable SELECT 'Form3' AS FormID;
    INSERT @formTable SELECT 'Form5'     AS FormID;


 DECLARE @CCount TABLE (FormID varchar(max), Present varchar(max))
    INSERT @CCount SELECT 'Form1' AS FormID, 'Yes' AS Present;
    INSERT @CCount SELECT 'Form2' AS FormID, 'Yes' AS Present;

 DECLARE @subject varchar(12);
 SET @subject = 'Subject 22'

 SELECT t.FormID AS Form, Present  
 FROM  @formTable t LEFT JOIN @CCount c ON t.FormID = c.FormID
 

который создает таблицу, которая выглядит следующим образом:

  Form     Present
 Form1      Yes
 Form2      Yes
 Form3      NULL
 Form5      NULL
 

Я хочу, чтобы это выглядело так :

   Form     Subject 22
  Form1      Yes
  Form2      Yes
  Form3      NULL
  Form5      NULL
 

Как я могу это сделать?

Спасибо!

Ответ №1:

Вы не можете использовать переменные для имен столбцов — вы можете сделать это с помощью динамического SQL, хотя вам нужно быть очень осторожным с динамическим SQL и не вводить уязвимость SQL-инъекции.

Комментарии:

1. Если я помещу переменную в таблицу, это поможет?

2. @user918967 — Нет. Необходимо указать псевдоним столбца, если не используется динамический SQL.

Ответ №2:

Одним из способов может быть динамический SQL:

 declare @sql nvarchar(max)
set @sql = 'SELECT t.FormID AS Form, Present as ['   @subject   
    '] FROM  @formTable t LEFT JOIN @CCount c ON t.FormID = c.FormID'
exec @sql