1

我不知道为什么我不能使用这种语法将值插入到我的表中。我可以插入一行,但我不能插入多行。

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)
4

6 回答 6

4

你的语法是正确的。但是,插入多行是 SQL-92 功能。好像你的数据库不支持它。

于 2012-05-24T20:23:18.670 回答
1

尝试明确定义要插入的列:

INSERT INTO T1 (ID, CAT, M_ID, T_CAT, NUM)
VALUES
(32,'Math',945,'Red',2),
(6,'English',232,'Blue',2)

请参阅此工作示例

于 2012-05-24T20:16:38.847 回答
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 子句选项。

于 2012-10-03T12:59:44.613 回答
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 列,如果你有其中一个,你需要列的列表。

但是,没有列表不应该导致您的问题。

于 2012-05-24T20:28:21.453 回答
0

Netezza 支持在 SQL 中批量上传。非标准的 EXTERNAL TABLE 将常规表替换为 CSV 平面文件。这可以在 INSERT...SELECT... 语句中使用。

请注意,USING子句没有逗号分隔术语(我对此有所了解)。另外,因为我使用 pyODBC,所以设置了 PIPE 分隔符和ODBC 。JAVA是另一个远程源。skiprows 1项丢弃标题。

INSERT INTO NetezzaTable
SELECT *
FROM EXTERNAL 'C:\\temp\\Your.csv'
USING (
delimiter '|'
REMOTESOURCE 'ODBC'
LOGDIR 'C:\\temp'
skiprows 1
maxerrors 0
fillrecord);
于 2015-02-28T23:27:08.477 回答
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>
于 2013-09-19T09:47:37.797 回答