-1

我在使用 SQL 插入语句时遇到问题。

目前,Insert 语句用于将数据从 .CSV 文件传输到 SQL 表中,但 .CSV 文件的内容可能会有所不同,即它可能包含与之前不同的列。

我用来从 .CSV 文件中获取数据的语句支持不同的列,因为它创建了一个与 .CSV 完全相同的临时表。

我目前使用的插入语句是:

INSERT INTO RTCU(ItemDATE, ItemTIME, SITENAME, GENSETNAME, GENSET_SN, REASON, EVENT, RPM, Pwr
                 ,Gfrq ,Vg1 ,Vg2 ,Vg3 ,Vg12 ,Vg23 ,Vg31, Ig1, Ig2, Ig3, Mfrq, Vm1, Vm2, Vm3
                 ,Vm12 ,Vm23 ,Vm31 ,BIN ,BOUT ,Mode ,CCpres ,OilLev
                 ,ActDem ,OilT ,AirInT ,RecAT ,JWTout ,JWTin ,JWGKin ,CylA1 ,CylA2 ,CylA3 ,CylA4 ,CylA5
                 ,CylA6 ,CylB1 ,CylB2 ,CylB3 ,CylB4 ,CylB5 ,CylB6 ,ActPwr ,kWhour ,Runhrs ,VRO)      
SELECT CONVERT(DATETIME,ItemDATE,103), ItemTIME, SITENAME, GENSETNAME, GENSET_SN, REASON, EVENT, RPM, Pwr
                 ,Gfrq ,Vg1 ,Vg2 ,Vg3 ,Vg12 ,Vg23 ,Vg31, Ig1, Ig2, Ig3, Mfrq, Vm1, Vm2, Vm3
                 ,Vm12 ,Vm23 ,Vm31 ,BIN ,BOUT ,Mode ,CCpres ,OilLev
                 ,ActDem ,OilT ,AirInT ,RecAT ,JWTout ,JWTin ,JWGKin ,CylA1 ,CylA2 ,CylA3 ,CylA4 ,CylA5
                 ,CylA6 ,CylB1 ,CylB2 ,CylB3 ,CylB4 ,CylB5 ,CylB6 ,ActPwr ,kWhour ,Runhrs ,VRO
FROM tmpDATA

但是正如您所看到的,我复制的列是固定的,那么如果我的一个 .CSV 文件有一个列“HeatMeter”,我将如何将该列复制到 RTCU 表中呢?

提前致谢!!尼尔

4

1 回答 1

0

我不能 100% 确定我了解您的需求,但这是我最好的猜测......

你有一个目标表...

 ID | val_1 | val_2 | val_3

你有一个源表...

 ID | val_1 | val_3

你有第二个源表......

 ID | val_2 | val_3

您想将来自两个不同来源的数据插入到目标表中......

一种选择是在不同的列上指定默认值...

CREATE TABLE destination (
  id      INT,
  val_1   INT DEFAULT(-1),
  val_2   INT DEFAULT(-2),
  val_3   INT DEFAULT(-3)
)

-- val3 is not specified in this insert
-- This means that it will appear as -3 for all the inserted rows
------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2)
SELECT id, val_1, val_2 FROM source1

-- val1 is not specified in this insert
-- This means that it will appear as -1 for all the inserted rows
------------------------------------------------------------------
INSERT INTO destination (id, val_2, val_3)
SELECT id, val_2, val_3 FROM source2

另一种选择是简单地硬编码您希望在“缺失”字段中出现的值......

-- source1 does not have a val_3 field, so we hard-code the insert
-- to always put NULL in that field.
-------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2, val3)
SELECT id, val_1, val_2, NULL  FROM source1

-- source2 does not have a val_1 field, so we hard-code the insert
-- to always put 0 in that field.
-------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2, val_3)
SELECT id, 0,  val_2, val_3 FROM source2

任何值都可以用作默认值或硬编码值。

于 2012-08-14T10:40:26.217 回答