[英]How to insert row into a table by select column name and value from another table in SQL Server
I have a table with many columns like:我有一个包含许多列的表,例如:
Table A :表一:
ColumnA | ColumnB | ColumnC | ColumnD | ColumnE
_______________________________________________
valueA | valueB | valueC | valueD | valueE
How can I insert into Table B like below?如何插入到表 B 中,如下所示?
Table B :表乙:
ColumnName | ColumnValue
_________________________
ColumnA | valueA
ColumnB | valueB
ColumnC | valueC
ColumnD | valueD
ColumnE | valueE
Thank you!谢谢!
You need to Unpivot
the data.您需要对数据进行
Unpivot
。 One option uses CROSS APPLY
and table valued constructor
一种选择使用
CROSS APPLY
和table valued constructor
SELECT ColumnName,
ColumnValue
FROM Yourtable
CROSS APPLY (VALUES ('ColumnA',ColumnA),
('ColumnB',ColumnB),
('ColumnC',ColumnC),
('ColumnD',ColumnD),
('ColumnE',ColumnE))TC(ColumnName, ColumnValue)
Try with dynamic UNPIVOT:尝试使用动态 UNPIVOT:
DECLARE @COLS VARCHAR(MAX) = ''
SELECT @COLS = @COLS + ', [' + COLUMN_NAME + ']' FROM [yourDBName].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableA'
DECLARE @ColumNames VARCHAR(MAX)= STUFF(@COLS, 1,1, '')
DECLARE @Cmd VARCHAR(MAX) = '
SELECT * FROM
(SELECT * FROM TableA) x
UNPIVOT
(
[Value] FOR [Column] IN (' + @ColumNames + ')
) UNPVT'
INSERT INTO TableB
EXEC (@Cmd)
You can also use a normal UNPIVOT for this.您也可以为此使用普通的 UNPIVOT。
A example using table variables:使用表变量的示例:
declare @TableA table (Id int identity(1,1), ColumnA int, ColumnB int, ColumnC int, ColumnD int, ColumnE int);
declare @TableB table (ColumnName varchar(30), ColumnValue int);
insert into @TableA (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE) values
(1,2,3,4,5);
insert into @TableB (ColumnName, ColumnValue)
select ColumnName, ColumnValue from @TableA
unpivot (ColumnValue for ColumnName in (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE)) unpiv;
select * from @TableB;
Returns:返回:
ColumnName ColumnValue
---------- -----------
ColumnA 1
ColumnB 2
ColumnC 3
ColumnD 4
ColumnE 5
Use UNPIVOT :使用UNPIVOT :
SELECT U.ColumnName,U.ColumnValue
FROM @tblA A
UNPIVOT
(
ColumnValue
for ColumnName in ([ColumnA], [ColumnB], [ColumnC],[ColumnD],[ColumnE])
) U;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.