1

在 teradata 中,我们可以在查询中使用单个插入语句插入多条记录吗?如果是,如何?

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

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

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

4

4 回答 4

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;

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

于 2013-09-06T09:30:53.177 回答
1

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

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

1   A   1000
2   B   2000
3   C   3000

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

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

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

于 2013-01-23T07:27:02.213 回答
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 的答案。

于 2012-12-20T14:34:09.047 回答
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;
于 2016-03-21T15:49:53.640 回答