Могу ли я создать таблицу со столбцами, названными аналогично значению поля другой таблицы, возвращаемому с помощью оператора SELECT

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Изображение вопроса

Когда я выполняю этот скрипт, возникает синтаксическая ошибка. Что в этом плохого?

 use TEST
go

CREATE TABLE newTagsTable 
( 
     (SELECT TEST.dbo.dynamicTags.Alais 
      FROM TEST.dbo.dynamicTags 
      WHERE ID = 2) varchar(200)
);
  

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

1. База данных, которую вы используете?

2. SQl Server 2008 R2

3. К вашему сведению, SQL Server 2008R2 не поддерживается уже более года, @SamraatRajput, вам действительно следует посмотреть на пути обновления.

4. Не публикуйте изображения кода и данных, @SamraatRajput . Поместите код и данные как text ; это то, что есть в конце концов.

5. Сторона, обратите внимание, что это действительно старая версия SSMS; Я предлагаю обновить до последней версии.

Ответ №1:

Это то, что вам нужно?

 SELECT Alais 
into newTagsTable 
FROM dynamicTags 
WHERE ID = 2;
  

ДЕМОНСТРАЦИЯ

Хорошо, тогда что-то вроде этого:

 create procedure test_proc
as
declare @p_sql varchar(2000);
declare @p_sql_2 varchar(2000);
declare @getid CURSOR;

SET @getid = CURSOR FOR
SELECT Alais
FROM   dynamicTags;

begin
    set @p_sql = 'create table newTagsTable (';
    
    OPEN @getid
    FETCH NEXT
    FROM @getid INTO @p_sql_2
    WHILE @@FETCH_STATUS = 0
    begin
        set @p_sql = @p_sql   @p_sql_2   ' varchar(20),'
        FETCH NEXT FROM @getid INTO @p_sql_2
    end;
    
    set @p_sql = left(@p_sql, len(@p_sql)-1)   ')';
    
    EXEC (@p_sql);
    
end;
  

А затем просто выполните процедуру:

 exec test_proc
  

Вы можете добавить к этому параметры, чтобы сделать его более удобным для других ситуаций…
Вот демонстрация для этого второго варианта:

ДЕМОНСТРАЦИЯ

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

1. Привет @SamraatRajput, вы обратились за помощью здесь, и помощь была предоставлена. Минимум, что вы можете сделать, это поблагодарить и прокомментировать предоставленные ответы?