отображение значений строки sql в имена столбцов - PullRequest
0 голосов
/ 16 января 2012

Я использую набор строк для импорта данных Excel в SQL 2008

Имена столбцов заканчиваются на F1, F2, F3 и т. Д. И т. Д.

Первая строка данных, однако, содержит значения, которыена самом деле должны быть имена столбцов.

Например,

F1         F2           F3              F4
---------------------------------------------------
BoxName    BoxDesc      Entity          EntityDesc

Я хочу переименовать столбцы в значения первой строки, поэтому столбец F1 становится BoxName, F2 становится BoxDesc.

Кроме того, я хочу иметь возможность сделать это, даже если порядок столбцов изменяется, и использовать переменную в качестве имени таблицы ИЛИ, если количество столбцов изменяется ИЛИ, если имена столбцов изменяются.

Ваша помощь приветствуется.

спасибо,

KS

Ответы [ 2 ]

0 голосов
/ 30 января 2012

В конце я использовал динамический SQL-подход, используя sp_executeSql.

Сначала я получил максимальное количество нужных мне столбцов.

Затем я использовал цикл while для перебора столбцов, переименовывая заголовки.

--Get the column name from the 4th row and store in @NewName, actual col name is F{n}
WHILE (@Counter < @MaxCols+1)
BEGIN
    Set @RowColVal = 'F'+RTrim(@Counter)
    Set @tmpSQL = N'SELECT @NewName = ' + @RowColVal + ' from MyTable WHERE ID=4'
EXEC sp_executesql @tmpSQL, N'@NewName nvarchar(50) OUTPUT', @NewName=@NewColName OUTPUT
Set @RenameTargetCol1 = 'MyTable.'+@RowColVal

    --rename column
    EXEC sp_RENAME @RenameTargetCol1, @NewColName, 'COLUMN'

    Set @Counter = @Counter+1
END
0 голосов
/ 16 января 2012

Попробуйте использовать хранимую процедуру sp_executesql , думаю, она может решить вашу проблему.После импорта файла Excel во временную таблицу temp выберите строку с именами столбцов, в этом случае 4-ую строку:

DECLARE @F1Col AS VARCHAR(50), @F2Col AS VARCHAR(50), @F3Col AS VARCHAR(50), @F4Col AS VARCHAR(50)


    SELECT TOP 4 @F1Col = F1,
    @F2Col = F2,
    @F3Col = F3,
    @F4Col = F4
    FROM temp

    SELECT F1 AS @F1Col,
    F2 AS @F2Col, 
    F3 AS @F3Col, 
    F4 AS @F4Col
    EXCEPT
    SELECT TOP 4 F1 AS @F1Col,
    F2 AS @F2Col,
    F3 AS @F3Col,
    F4 AS @F4Col
    FROM temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...