2016-09-23 481 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'想要插入的行數。希望這有助於:)