[英]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.