2013-05-28 5 views
4

Мои знания в SQL Server 2008 ограничены, и я не смог точно определить, как это сделать. Моя идея заключается в том, чтобы использовать результат SELECT, процедуры в виде списка имен столбцов (на основе процедуры, созданной в этом старом вопросе How do you return the column names from a table?) Я хотел бы сделать что-то вроде:использовать вывод запроса как имя столбца в sql sever

INSERT INTO new_table (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') 
SELECT (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') FROM YourTableName 

То, что я пытаюсь do - заполнить большую таблицу данными из таблицы с меньшим количеством столбцов (все они содержатся в большой таблице). Возможно, есть лучший способ сделать это.

ответ

3

Вы не можете этого сделать. Вы должны использовать динамический SQL, чтобы сделать это, что-то вроде этого:

DECLARE @NewTablecols AS NVARCHAR(MAX); 
DECLARE @query AS NVARCHAR(MAX); 


select @NewTablecols = STUFF((SELECT distinct ',' + 
         QUOTENAME(COLUMN_NAME) 
         FROM INFORMATION_SCHEMA.COLUMNS 
         WHERE TABLE_NAME = 'new_table' 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, ''); 



SET @query = 'INSERT INTO new_table ('+ @NewTablecols + ') 
     SELECT ' + @NewTablecols + ' FROM YourTableName'; 

execute(@query); 

Это при условии, что весь список столбцов, найденных в new_table, которые АЛОС найдено во второй таблице YourTableName в противном случае, вы получите сообщение об ошибке говоря, что имя столбца не найдено.

в действии здесь:

+0

Я забыл указать, что таблицы основаны на различных базах данных. Есть ли что-то, что я должен принять во внимание из-за этого условия? –

+0

@JorgePM Для оператора 'INSERT' используйте полное имя таблицы в виде' DatabaseName.SchemaName.TableName' и для набора сценариев 'USE databasename;' для получения имен столбцов для первой таблицы. –

+0

Блестящий! это сработало отлично, спасибо! –

Смежные вопросы