2016-09-23 483 views
2

我正在创建一个易失性表并尝试向表中插入行。我可以上传一排像下面...插入多行SQL Teradata


create volatile table Example 
(
    ProductID VARCHAR(15), 
    Price DECIMAL (15,2) 
) 
on commit preserve rows; 
et; 

INSERT INTO Example 
Values 
('Steve',4); 

然而,当我尝试上传多个我得到的错误:

"Syntax error: expected something between ')' and ','."

INSERT INTO Example 
Values 
('Steve',4), 
('James',8); 

回答

1

我不认为Teradata支持多行values语法。只需使用select

WITH dual as (SELECT 1 as x) 
INSERT INTO Example(ProductId, Price) 
    SELECT 'Steve' as ProductId, 4 as Price FROM dual UNION ALL 
    SELECT 'James' as ProductId, 8 as Price FROM dual; 
+0

这实际上给出了一个错误:一个SELECT for UNION必须引用一个表 –

0

正如戈登说,Teradata的不支持VALUES具有多个行(与UNION ALL将失败,因为从丢失的

您可以利用多语句请求(MSR。 ),而不是:

INSERT INTO Example Values('Steve',4) 
;INSERT INTO Example Values('James',8) 
; 

如果它是一个BTEQ工作的嵌件的最后一个分号后(提交作为一个块时,有一个新的命令开始在它的MSR的一部分,同一条线路)在SQL助手或Studio你。必须使用提交而不是F5

+0

谢谢!这工作。感谢帮助。 – Bocean

0
create table dummy (dumcol varchar(1)); 

INSERT INTO Student 
    (Name, Maths, Science, English) 
SELECT 'Tilak', 90, 40, 60 from dummy union 
SELECT 'Raj', 30, 20, 10 from dummy 
; 
0

我通过RECURSIVE发现了一个解决方案。它是这样的: -

INSERT INTO table (col1, col2) 
with recursive table (col1, col2) as 
(select 'val1','val2' from table) -- 1 
select 'val1','val2' from table -- 2 
union all select 'val3','val4' from table 
union all select 'val5','val6' from table; 

行1的数据没有被插入(但你需要这一行)。从第2行开始,您为val1,val2等输入的数据被插入到相应的列中。使用尽可能多的UNION ALLs'想要插入的行数。希望这有助于:)