我不知道为什么我不能使用这种语法将值插入到我的表中。我可以插入一行,但我不能插入多行。
CREATE TABLE T1 (
ID BIGINT NULL,
CAT VARCHAR(255) NULL,
M_ID BIGINT NULL,
T_CAT VARCHAR(255) NULL,
NUM BIGINT NULL)
INSERT INTO T1
VALUES
(32,'Math',945,'Red',2),
(6,'English',232,'Blue',2)
答案 0 :(得分:4)
您的语法是正确的。但是,插入多行是SQL-92的一项功能。好像您的数据库不支持它。
答案 1 :(得分:1)
尝试明确定义要插入的列:
INSERT INTO T1 (ID, CAT, M_ID, T_CAT, NUM)
VALUES
(32,'Math',945,'Red',2),
(6,'English',232,'Blue',2)
答案 2 :(得分:1)
我不认为所有数据库都支持使用VALUES语句插入多行。您可以使用单独的插入语句:
INSERT INTO T1 VALUES (32,'Math',945,'Red',2);
INSERT INTO T1 VALUES (6,'English',232,'Blue',2);
或者,您可以使用SELECT语法:
INSERT INTO T1
select 32,'Math',945,'Red',2 union all
select 6,'English',232,'Blue',2
(注意:我使用SQL Server语法来获取常量。您可能需要添加类似“from dual”的内容。)
最后,我完全赞同其他海报,即在表名之后放置列表是一种很好的做法,你应该自动完成。好吧,另一个好的做法是拥有一个自动递增的id列,如果你有其中一个,你需要列列表。
但是,没有列表不应该导致您的问题。
答案 3 :(得分:1)
此特定错误是因为您没有使用分号终止CREATE TABLE语句。 Netezza要求语句终止,它不会智能地解析多语句查询。
CREATE TABLE T1 (
ID BIGINT NULL,
CAT VARCHAR(255) NULL,
M_ID BIGINT NULL,
T_CAT VARCHAR(255) NULL,
NUM BIGINT NULL);
INSERT INTO T1
VALUES
(32,'Math',945,'Red',2),
(6,'English',232,'Blue',2);
您遇到的下一个错误也可能是Gordon的回应,因为NZ并不真正支持任何高级VALUES子句选项。
答案 4 :(得分:0)
由于上述大多数答案都正确地解释了Netezza不支持VALUES子句,因为它属于NZ不熟悉的SQL-92类,您也可以使用Netezza客户端附带的nzload工具来加载数据一次性。
将CSV文件中的数据加载到NZ表中的命令是:
nzload -host <host> -u <username> -pw <password> -db <db_name> -t <table_name> -delim ',' -df <data_file>
答案 5 :(得分:0)
Netezza支持在SQL中批量上传。非标准EXTERNAL TABLE用CSV平面文件替换常规表。这可以在INSERT ... SELECT ...语句中使用。
请注意 USING 子句没有逗号分隔术语(我得到了一点点)。此外,设置了PIPE分隔符和 ODBC ,因为我使用pyODBC。 JAVA 是另一个 REMOTESOURCE 。 skiprows 1 一词会丢弃标题。
INSERT INTO NetezzaTable
SELECT *
FROM EXTERNAL 'C:\\temp\\Your.csv'
USING (
delimiter '|'
REMOTESOURCE 'ODBC'
LOGDIR 'C:\\temp'
skiprows 1
maxerrors 0
fillrecord);