此语句用于将批量数据从外部文件导入到数据库表中。此语句还提供对处理 SQL Anywhere 的 dbunload 实用程序(reload.sql 文件)输出的支持。
LOAD [ INTO ] TABLE [ owner.]table-name ( column-name, ... ) FROM stringfilename [ load-option ... ]
load-option : CHECK CONSTRAINTS { ON | OFF } | COMPUTES { ON | OFF} | DEFAULTS { ON | OFF } | DELIMITED BY string | ENCODING encoding | ESCAPES { ON } | FORMAT { ASCII | TEXT} | ORDER { ON | OFF}| | QUOTES { ON | OFF } | SKIP integer | STRIP { ON | OFF | BOTH } | WITH CHECKPOINT { ON | OFF }
comment-prefix : string
encoding : string
column-name 此子句用于指定要装载数据的一个或多个列。如果 DEFAULTS 选项为 OFF,则将列的列表中不存在的任何列都变为 NULL。如果 DEFAULTS 为 ON 并且列具有缺省值,则使用该值。如果 DEFAULTS 为 OFF 并且列列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。
如果指定了列列表,它会列出文件中应存在的列以及列的显示顺序。列名不能重复。
FROM string-filename 此子句用于指定从中装载数据的文件。将 string-filename 以字符串的形式传递到数据库服务器。因此,该字符串遵循的数据库格式要求与其它 SQL 字符串一样。尤其是:
要指示目录路径,反斜线字符 (\) 必须用两个反斜线来表示。将数据从文件 c:\temp\input.dat 装载到 Employees 表的语句为:
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' ... |
路径名相对于数据库服务器,而不是客户端应用程序。
可以使用 UNC 路径名从数据库服务器以外的计算机上的文件装载数据。
load-option 子句 有几个装载选项可以指定,以控制数据是如何装载的。下面的列表给出了所支持的装载选项:
CHECK CONSTRAINTS 子句 此子句控制装载期间是否检查约束。缺省情况下,CHECK CONSTRAINTS 为 ON,但是在 CHECK CONSTRAINTS 为 OFF 时,卸载实用程序 (ulunload) 可写出 LOAD TABLE 语句。将 CHECK CONSTRAINTS 设置为 OFF 禁用检查约束,这很有用,例如,在数据库重建过程。
DEFAULTS 子句 缺省情况下,DEFAULTS 被设置为 OFF。如果 DEFAULTS 为 OFF,则将任何未显示在列的列表中且可为空的列置为 NULL。如果将 DEFAULTS 设置为 OFF 并且列的列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。如果将 DEFAULTS 设置为 ON 并且列具有缺省值,则使用该值。
DELIMITED BY 子句 此子句用于指定列分隔符字符串。缺省的列分隔符字符串是逗号;但是它可以是任何长度在 255 字节之内的字符串(如 ... DELIMITED BY '###' ...
)。其它 SQL 字符串的格式化要求也适用。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,... DELIMITED BY '\x09' ...
。
ESCAPES 子句 ESCAPES 始终为 ON,因此数据库服务器会识别反斜线字符后面的字符并将其解释为特殊字符。换行符可以作为组合 \n 包含在数据中,其它字符可以作为十六进制 ASCII 代码(如使用 \x09 代替制表符)包含在数据中。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 插入反斜线和字母 q。
FORMAT 子句 此子句指定正在从中装载数据的数据源的格式。使用 TEXT,假定输入行为字符(由 ENCODING 选项所定义),每个输入行占一行,值由列分隔符字符串分隔。还支持 ASCII。
QUOTES 子句 此子句指定字符串是否用引号引起来。UltraLite 仅支持 ON,因此 LOAD TABLE 语句要求将字符串用引用符号引起来。此引号字符为撇号(单引号)。字符串中出现的第一个这样的字符将被视为该字符串的引号字符。字符串必须以匹配的引号结束。
列分隔符字符串可以包含在列值中。另外,假定引号字符不属于该值的一部分。因此,尽管地址中出现了逗号,以下行也会被视为两个值(而不是三个值)。此外,将地址引起来的引号不会插入到数据库中。
'123 High Street, Anytown',(715)398-2354 |
要在值中包括引用符号,必须使用两个引号。以下这个行在第三列中包括一个单引号字符值:
'123 High Street, Anytown','(715)398-2354','''' |
SKIP 子句 此子句用于指定是否忽略文件开始位置的行。integer 参数指定要跳过的行数。例如,可以用此子句跳过包含列标题的行。
STRIP 子句 此子句正在被处理但是却被忽略。此子句指定在插入无引号值之前,是否应去除这些值的前导或尾随空白。STRIP 选项接受以下选项:
STRIP ON 去除前导空白。
STRIP OFF 不去除前导空白或尾随空白。
STRIP BOTH 去除前导空白和尾随空白。
WITH CHECKPOINT 子句 此子句用于指定是否执行检查点。缺省设置为 OFF。如果将此子句设置为 ON,则会在成功完成语句之后执行检查点操作。
LOAD TABLE 允许执行从文件到数据库表的高效的大量插入。其主要提供对 SQL Anywhere dbunload 实用程序(reload.sql 文件)输出的支持。
仅有 Windows 和 Linux 支持 LOAD TABLE,而 Palm OS 或 Windows Mobile 则不支持。
使用 FORMAT TEXT 时,不指定任何值就表示 NULL。例如,如果需要三个值且文件包含 1,,'Fred',
,则所插入的值为 1、NULL 和 Fred。如果文件包含 1,2,
,则会插入值 1、2 和 NULL。仅由空格组成的值也被视为 NULL 值。例如,如果文件包含 1, ,'Fred',
,则会插入值 1、NULL 和 Fred。所有其它值均被视为非 NULL。例如 ''(单引号 单引号)是一个空字符串。'NULL' 是一个包含四个字母的字符串。
如果由 LOAD TABLE 装载的列不允许使用 NULL 值,且文件值为 NULL,则会为数字列赋予值 0(零),为字符列赋予空字符串 ('')。如果由 LOAD TABLE 装载的列允许使用 NULL 值,且文件值为 NULL,则列值将为 NULL(对于所有类型)。
如果表包含 a、b 和 c 三列,输入数据包含 a、b 和 c,而 LOAD 语句仅指定 a 和 b 列作为要将数据装入的列,则会向 c 列插入以下值:
如果将 DEFAULTS 指定为 ON 并且 c 列具有缺省值,则使用该缺省值。
如果 c 列没有缺省值,且列允许使用 NULL,则使用 NULL。
如果列 c 没有缺省值,且不允许使用 NULL,则使用零 (0) 或空字符串 (''),或者返回错误,这要根据列的数据类型而定。
自动提交。
SQL/2003 服务商扩充。
以下是 LOAD TABLE 的示例。首先,创建一个表,然后使用名为 input.txt 的文件将数据装载到表中。
CREATE TABLE t( a CHAR(100) primary key, let_me_default INT DEFAULT 1, c CHAR(100) ); |
以下是名为 input.txt 的文件的内容:
'this_is_for_column_c', 'this_is_for_column_a', ignore_me |
以下 LOAD 语句装载名为 input.txt 的文件:
LOAD TABLE T ( c, a ) FROM 'input.txt' FORMAT TEXT DEFAULTS ON; |
命令 SELECT * FROM t
生成结果集:
a | let_me_default | c |
---|---|---|
this_is_for_column_a | 1 | this_is_for_column_c |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |