如何将临时表的单列数据插入主表的多列?

时间:2018-04-09 09:40:29

标签: sql sql-server-2012

我在临时表中有如下所示的数据:

col
-----
23041
ORF5674
FNRA
FIX_44
0
AE

主表架构:

CREATE TABLE [dbo].[t_Act](
            [EventType]                 [nvarchar](50) NULL, 
            [ClientMsgID]               [nvarchar](50) NULL, 
            [SessionID]                 [nvarchar](50) NULL, 
            [Protocol]                  [nvarchar](50) NULL, 
            [MessageType]               [nvarchar](50) NULL, 
            [SequenceNumber]            [nvarchar](50) NULL,  )

我想将数据插入主表。

1 个答案:

答案 0 :(得分:0)

试试这个:

INSERT INTO [dbo].[t_Act]
SELECT MAX(CASE WHEN D.RN=1 THEN D.Col END)[EventType]
    ,MAX(CASE WHEN D.RN=2 THEN D.Col END) [ClientMsgID]
    ,MAX(CASE WHEN D.RN=3 THEN D.Col END) [SessionID]
    ,MAX(CASE WHEN D.RN=4 THEN D.Col END) [Protocol]
    ,MAX(CASE WHEN D.RN=5 THEN D.Col END) [MessageType]
    ,MAX(CASE WHEN D.RN=6 THEN D.Col END) [SequenceNumber]
FROM(
    SELECT *
        ,ROW_NUMBER() OVER(ORDER BY (SELECT NULL))RN 
    FROM #TempTable
    )D

如果您有任何要对行值进行排序的列,请在上述查询中使用该值。

ROW_NUMBER() OVER(ORDER BY OrderColumn)RN

而不是

ROW_NUMBER() OVER(ORDER BY (SELECT NULL))RN

这不是100%安全的方法。