使用CREATE MULTISET TABLE批量插入多行到新表时遇Teradata语法错误
Teradata多行INSERT VALUES语法错误(3706)解决方法
问题重现
执行以下Teradata SQL时触发3706语法错误:
DROP TABLE table_name; -- Create the multiset table to store product line owner information CREATE MULTISET TABLE table_name ( Product VARCHAR(100), Owner VARCHAR(100), Email VARCHAR(100) ); -- Insert sample data into the table INSERT INTO table_name (Product, Owner, Email) VALUES ('Product', 'Owner Name', 'owner.name@email.com'), ('Product1', 'Owner Name1', 'owner1.name@email.com'); -- Retrieving data from the table SELECT * FROM table_name;
错误信息:
[Teradata Database] [3706] Syntax error: expected something between ')' and ','.
仅插入单行数据时语句可正常执行。
问题原因
Teradata不支持标准SQL中VALUES子句后用逗号分隔多行数据的写法,这是导致语法错误的直接原因。
解决方案
提供两种可行的多行插入方式:
方式1:使用多个独立INSERT语句(适合少量数据)
DROP TABLE table_name; CREATE MULTISET TABLE table_name ( Product VARCHAR(100), Owner VARCHAR(100), Email VARCHAR(100) ); INSERT INTO table_name (Product, Owner, Email) VALUES ('Product', 'Owner Name', 'owner.name@email.com'); INSERT INTO table_name (Product, Owner, Email) VALUES ('Product1', 'Owner Name1', 'owner1.name@email.com'); SELECT * FROM table_name;
方式2:使用UNION ALL构造数据集插入(适合大量数据,效率更高)
DROP TABLE table_name; CREATE MULTISET TABLE table_name ( Product VARCHAR(100), Owner VARCHAR(100), Email VARCHAR(100) ); INSERT INTO table_name (Product, Owner, Email) SELECT 'Product', 'Owner Name', 'owner.name@email.com' UNION ALL SELECT 'Product1', 'Owner Name1', 'owner1.name@email.com'; SELECT * FROM table_name;
验证
执行修改后的语句后,SELECT * FROM table_name;会正常返回两行测试数据。
内容的提问来源于stack exchange,提问作者user21077255
相关产品推荐
相关产品推荐

