web-dev-qa-db-fra.com

Insérer plusieurs lignes SQL Teradata

Je crée une table volatile et tente d'insérer des lignes dans la table. Je peux télécharger une ligne comme ci-dessous ...


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

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

Cependant, quand j'essaye de télécharger plusieurs, j'obtiens l'erreur:

"Erreur de syntaxe: on attend quelque chose entre ')' et ','."

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

Comme Gordon l'a dit, Teradata ne prend pas en charge VALUES avec plusieurs lignes (et UNION ALL échouera à cause du FROM manquant.

Vous pouvez utiliser une demande de relevé multiple (MSR):

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

S'il s'agit d'un travail BTEQ, les insertions sont soumises sous la forme d'un bloc après le dernier point-virgule (lorsqu'une nouvelle commande commençant sur la même ligne fait partie du MSR). Dans SQL Assistant ou Studio, vous devez le soumettre en utilisant F9 au lieu de F5.

4
dnoeth

Je ne pense pas que Teradata supporte la syntaxe à plusieurs lignes values. Il suffit d'utiliser 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;
2
Gordon Linoff

Au moins dans notre version de Teradata, nous ne pouvons pas utiliser une instruction insert avec un CTE. Au lieu de cela, trouvez une vraie table (de préférence de petite taille) et faites un top 1.

Insert Into OtherRealTable(x, y)
Select top 1
   'x' as x, 
   'y' as y
FROM RealTable
0
Eman4real

J'ai trouvé une solution pour cela via RECURSIVE. Ça va comme ça:-

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;

Les données de la ligne 1 ne sont pas insérées (mais vous avez besoin de cette ligne). À partir de la ligne 2, les données que vous entrez pour val1, val2, etc. sont insérées dans les colonnes respectives. Utilisez autant de lignes que vous voulez insérer dans UNION ALL. J'espère que cela t'aides :)

0
Swastik Raj Ghosh
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
access_granted