簡體   English   中英

將sql行值映射到列名

[英]mapping sql row values to column names

我正在使用行集將Excel數據導入sql 2008

列名最終是F1,F2,F3等。

但是,數據的第一行包含實際上應為列名的值。

例如,

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

我想將列重命名為第一行的值,因此列F1變為BoxName,F2變為BoxDesc。

另外,即使列的順序更改並且通過使用變量作為表名稱,或者列數更改,或者列名稱更改,我都希望能夠做到這一點。

感謝您的幫助。

謝謝,

堪薩斯州

嘗試使用sp_executesql存儲過程,我認為它可以解決您的問題。 將excel文件導入臨時表temp后,選擇具有列名的行,在這種情況下為第四行:

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

最后,我使用sp_executeSql使用了動態sql方法。

首先,我得到了所需的最大列數。

然后,我使用了一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM