如何在Teradata中使用单个插入语句插入多个记录?

时间:2012-12-20 11:50:13

标签: sql teradata

在teradata中,我们可以在查询中使用单个insert语句插入多个记录。如果是,怎么样?

说我正在尝试做类似的事情:

insert test_rank (storeid,prodid,sales) values (1,'A',1000) ( 2,'B',2000) ,(3,'C',3000); 

但是在teradata中无法在一个语句中插入所有3条记录。

4 个答案:

答案 0 :(得分:4)

INSERT INTO test_rank (storeid, prodid, sales)
SELECT * 
FROM (SELECT * 
      FROM (SELECT 0 storeid, 
                   1 prodid, 
                   2 sales) T1 
      UNION ALL 
      SELECT * 
      FROM (SELECT 3 storeid, 
                   4 prodid, 
                   5 sales) T2
      UNION ALL 
      SELECT * 
      FROM (SELECT 6 storeid, 
                   7 prodid, 
                   8 sales) T3
      ...
)T;

谢谢,罗布!你的建议帮助了我。

答案 1 :(得分:1)

我不确定这会有多实用,但从技术上来说,以下是可能的:

INSERT INTO MyTable
SELECT *
  FROM 
( SELECT 1 AS StoreID
       , 'A' AS ProdID
       , 1000 AS SALES
  UNION
  SELECT 2 
       , 'B'
       , 2000
  SELECT 3
       , 'C'
       , 3000
) DT1
;

其次,如果您正在使用BTEQ,那么您可以查看USING命令与平面文件重复单个INSERT语句一起加载表。但是在那时你可以利用适当的加载实用程序(MultiLoad或FastLoad),具体取决于卷来完成这个任务,如果你做了任何合理的量。

编辑 - 2015-12-10

除非UNION中的每个SELECT首先放在派生表中,否则上面的SQL不会运行。请参阅以下Anatoly的答案,了解正确的语法。

答案 2 :(得分:1)

如果您正在处理小数据,可以尝试将值放在文本文件中,然后使用Teradata SQLA导入它们。

创建一个包含输入的文本文件,由选项卡分隔(如果选项卡在您的版本中不起作用,请使用逗号):

1   A   1000
2   B   2000
3   C   3000

然后在SQLA上选择导入模式,文件 - >导入数据,并运行以下语句:

insert into YourTable values (?, ?, ?);

确保使用正确的数据类型预先创建表格。

答案 3 :(得分:0)

有时创建带有数据的表 非常有用,而不是尝试进行复杂的动态插入。

CREATE TABLE  db.Inc_Config  AS (
SELECT
c.calendar_date,
null  as  Sent_To,
CURRENT_TIMESTAMP as  Sent_Date,
date '2016-01-01' as  Inc_Start_Date,
date '2016-02-29' as  Inc_End_Date
FROM  sys_calendar.CALENDAR c  
WHERE 
c.calendar_date BETWEEN date '2016-01-01' AND date '2016-02-29' 
) WITH data;