将批量数据从外部文件导入到数据库表。
LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, ... ) ] load-source [ load-option ... ] [ statistics-limitation-option ]
load-source : { FROM filename-expression | USING FILE filename-expression | USING CLIENT FILE client-filename-expression | USING VALUE value-expression | USING COLUMN column-expression }
filename-expression : string | variable
client-filename-expression : string | variable
value-expression : expression
column-expression : column-name FROM table-name ORDER BY column-list
load-option : BYTE ORDER MARK { ON | OFF } | CHECK CONSTRAINTS { ON | OFF } | { COMPRESSED | AUTO COMPRESSED | NOT COMPRESSED } | { ENCRYPTED KEY 'key' | NOT ENCRYPTED } | COMMENTS INTRODUCED BY comment-prefix | COMPUTES { ON | OFF } | DEFAULTS { ON | OFF } | DELIMITED BY string | ENCODING encoding | ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { TEXT | BCP | XML row-xpath ( column-xpath,... ) [ NAMESPACES namespace ] } | SHAPEFILE | HEXADECIMAL { ON | OFF } | ORDER { ON | OFF } | PCTFREE percent-free-space | QUOTE string | QUOTES { ON | OFF } | ROW DELIMITED BY string | SKIP integer | STRIP { ON | OFF | LTRIM | RTRIM | BOTH } | WITH CHECKPOINT { ON | OFF } | WITH { FILE NAME | ROW | CONTENT } LOGGING
statistics-limitation-option : STATISTICS { ON [ ALL COLUMNS ] | ON KEY COLUMNS | ON ( column-list ) | OFF }
comment-prefix : string
encoding : string
column-name 此子句用于指定要装载数据的一个或多个列。如果 DEFAULTS 选项为 OFF,则将列的列表中不存在的任何列都变为 NULL。如果 DEFAULTS 为 ON 并且列具有缺省值,则使用该值。如果 DEFAULTS 为 OFF 并且列列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。
如果指定了列列表,它会列出文件中应存在的列以及列的显示顺序。列名不能重复。列表中未出现的列名将设置为 NULL/零/空或 DEFAULT(取决于列的为空性、数据类型和 DEFAULTS 设置)。使用列名 filler() 可指定存在于输入文件中但是要被 LOAD TABLE 语句忽略的列。
load-source 此子句用于指定要从中装载数据的数据源。可以从多个数据源中装载数据。以下列表列出了支持的装载源:
FROM 子句 此子句用于指定文件。将 filename-expression 以字符串的形式传递到数据库服务器。因此,该字符串遵循的数据库格式要求与其它 SQL 字符串一样。尤其是:
要指示目录路径,反斜线字符 (\) 必须用两个反斜线来表示。将数据从文件 c:\temp\input.dat 装载到 Employees 表的语句为:
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' ... |
路径名相对于数据库服务器,而不是客户端应用程序。
可以使用 UNC 路径名从数据库服务器以外的计算机上的文件装载数据。
USING FILE 子句 此子句用于从文件装载数据。其作用等同于指定 FROM filename 子句。
当 LOAD TABLE 语句与 USING FILE 子句一起使用时,可以请求进度消息。请参见progress_messages 选项。
也可以使用 Progress 连接属性确定语句的执行进度。请参见Progress 连接属性。
USING CLIENT FILE 子句 此子句用于从客户端计算机上的文件装载数据。当数据库服务器从 client-filename-expression 检索数据时,数据在服务器的内存中没有实例化,所以数据库服务器对 BLOB 表达式大小的限制并不适用于文件。因此,客户端文件可以具有任意大小。
当 LOAD TABLE 语句与 USING CLIENT FILE 子句一起使用时,可以请求进度消息。请参见progress_messages 选项。
也可以使用 Progress 连接属性确定语句的执行进度。请参见Progress 连接属性。
USING VALUE 子句 此子句用于从任何类型为 CHAR、NCHAR、BINARY 或 LONG BINARY 的表达式中或 BLOB 字符串中装载数据。以下是此子句的用法示例:
以下语法使用 xp_read_file 系统过程从目标文件获取要装载的值:
... USING VALUE xp_read_file( 'filename' )... |
以下语法直接指定值,并插入其值分别为 4 和 5 的两行:
... USING VALUE '4\n5'... |
以下语法将 READ_CLIENT_FILE 函数的结果作为值使用:
... USING VALUE READ_CLIENT_FILE( client-filename-expression ) |
在本例中,也可以指定 USING CLIENT FILE client-filename-expression
,因为它们在语义上是等效的。
如果在 LOAD TABLE 语句中没有指定 ENCODING 子句,则如果值为 CHAR 或 BINARY 类型则假定用数据库字符集 (db_charset) 对值进行编码,而在值为 NCHAR 类型的情况下则假定使用 NCHAR 数据库字符集 (nchar_charset) 对值进行编码。
USING COLUMN 子句 此子句用于从另一个表的单个列装载数据。数据库服务器在通过重新使用 LOAD TABLE ...WITH CONTENT LOGGING 语句进行恢复期间重新使用事务日志时会用到此子句。LOAD TABLE ...WITH CONTENT LOGGING 语句的事务日志记录由连接在一起的行组成的块构成。恢复期间当数据库服务器在事务日志中遇到这些块时,会将这些块装入临时表中,然后再从原始装载操作中装载所有的数据。
可以在 USING COLUMN 子句中使用以下子句:
table-name 包含要从中装载数据的列的基表或临时表的名称。当从事务日志进行恢复期间被数据库服务器使用时,该表即为保存待分析和装载的行块的表。
column-name table-name 中列的名称,该列用于保存要装载的行块。
column-list 目标表中的一个或多个列,用于在装载数据前对行进行排序。
load-option 子句 可以通过指定若干装载选项来控制数据的装载方式。下面的列表给出了所支持的装载选项:
BYTE ORDER MARK 子句 此子句用于指定字节顺序标记 (BOM) 是否出现在编码中。缺省情况下,此选项为 ON,即允许服务器在数据的开始位置搜索并解释字节顺序标记 (BOM)。如果 BYTE ORDER MARK 为 OFF,则服务器不搜索 BOM。
如果指定了 ENCODING 子句:
如果未指定 ENCODING 子句:
CHECK CONSTRAINTS 子句 此子句用于控制装载期间是否检查约束。缺省情况下,CHECK CONSTRAINTS 为 ON,但是在 CHECK CONSTRAINTS 为 OFF 时,卸载实用程序 (dbunload) 可写出 LOAD TABLE 语句。将 CHECK CONSTRAINTS 设置为 OFF 禁用检查约束,这很有用,例如,在数据库重建过程。如果表的检查约束调用尚未创建的用户定义函数,则重建将失败,除非将 CHECK CONSTRAINTS 设置为 OFF。
COMMENTS INTRODUCED BY 子句 使用此子句可指定用于在数据文件中引入注释的字符串。使用此选项之后,LOAD TABLE 将忽略任何以字符串 comment-prefix 开头的行。例如,在以下示例中,input.dat 中以 // 开头的行将被忽略。
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' COMMENTS INTRODUCED BY '//' ... |
仅允许在一个新行的开始处使用注释。
如果省略 COMMENTS INTRODUCED BY,则数据文件不得包含注释,因为此时会将这些注释解释为数据。
COMPRESSED 子句 如果要装载的数据在输入文件中以压缩形式存在,请指定 COMPRESSED。数据库服务器会在装载数据前对其进行解压缩。如果指定了 COMPRESSED 但数据并未压缩,则 LOAD 失败并返回错误。
指定 AUTO COMPRESSED 可允许数据库服务器确定输入文件中的数据是否经过压缩。如果经过压缩,则数据库服务器会在装载数据前对其进行解压缩。
如果指定 NOT COMPRESSED,则表示输入文件中的数据未经压缩。如果数据经过压缩,但不希望数据库服务器将其解压缩,这时也可以指定 NOT COMPRESSED。这种情况下,数据在数据库中仍保持加密状态。但是,如果同时对文件进行了加密和压缩,则 NOT ENCRYPTED 只有在同时使用了 NOT COMPRESSED 的情况下才可以使用。
COMPUTES 子句 缺省情况下,此选项为 ON,即允许对已计算的列进行重新计算。将 COMPUTES 设置为 OFF 会禁用计算列的重新计算。COMPUTES 设置为 OFF 很有用,例如,在您重建数据库但表的某个计算列调用尚未创建的用户定义函数时。如果此选项不设置为 OFF,则重建将失败。
COMPUTES 设置为 OFF 时卸载实用程序 (dbunload) 会写出 LOAD TABLE 语句。
DEFAULTS 子句 缺省情况下,DEFAULTS 被设置为 OFF。如果 DEFAULTS 为 OFF,则将任何未显示在列的列表中且可为空的列置为 NULL。如果将 DEFAULTS 设置为 OFF 并且列的列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。如果将 DEFAULTS 设置为 ON 并且列具有缺省值,则使用该值。
DELIMITED BY 子句
此子句用于指定列分隔符字符串。缺省的列分隔符字符串是逗号;但是它可以是任何长度在 255 字节之内的字符串(如 ... DELIMITED BY '###' ...
)。指定字符串作为分隔符时应加上引号。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,... DELIMITED BY '\x09' ...
。
ENCODING 子句 此子句用于指定要装载到数据库中的数据所使用的字符编码。ENCODING 子句不能与 BCP 格式配合使用。对于 SHAPEFILE 格式,如果未指定 ENCODING 子句,则编码缺省值为 ISO-8859-1。
如果在装载操作期间发生转换错误,将根据 on_charset_conversion_failure 选项的设置进行报告。请参见on_charset_conversion_failure 选项。
有关如何获得 SQL Anywhere 支持的编码列表的详细信息,请参见支持的字符集。
指定 BYTE ORDER 子句,使数据中包含字节顺序标记。
ENCRYPTED 子句 此子句用于指定加密设置。装载加密数据时,应指定 ENCRYPTED KEY,并在其后附加用于加密输入文件中数据的密钥。
如果指定 NOT ENCRYPTED,则表示输入文件中的数据是未加密的。如果数据是加密的,但不希望数据库服务器将其解密,这时也可以指定 NOT ENCRYPTED。这种情况下,数据在数据库中仍保持加密状态。但是,如果同时对文件进行了加密和压缩,则 NOT ENCRYPTED 只有在同时使用了 NOT COMPRESSED 的情况下才可以使用。
ESCAPE CHARACTER 子句 此子句用于指定数据中使用的转义字符。以十六进制代码和符号存储的字符的缺省转义字符是反斜线 (\),例如 \x0A 是换行符。使用 ESCAPE CHARACTER 子句可以对此进行更改。例如,要将感叹号用作转义字符,应输入:
ESCAPE CHARACTER '!' |
只有单个的单字节字符才可用作转义字符。
ESCAPES 子句 此子句用于控制是否识别转义字符。在 ESCAPES 设置为 ON(缺省值)的情况下,数据库服务器会识别反斜线字符后面的字符并将其解释为特殊字符。换行符可以作为组合 \n 包含在数据中,其它字符可以作为十六进制 ASCII 代码(如使用 \x09 代替制表符)包含在数据中。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 插入反斜线和字母 q。
FORMAT 子句 此子句用于指定要从中装载数据的数据源的格式。
如果选择 FORMAT TEXT(缺省值),则假定输入行为字符(由 ENCODING 选项所定义),每个输入行占一行,值由列分隔符字符串分隔。
选择 FORMAT BCP 允许您导入 Adaptive Server Enterprise 生成的 BCP 输出文件。
选择 FORMAT SHAPEFILE 允许您导入 ESRI shapefile。必须使用 FROM filename-expression 或 USING FILE filename-expression 装载数据源,其中 filename-expression 是指文件扩展名为 .shp 的 ESRI shapefile。相关联的 .shx 和 .dbf 文件必须与 .shp 文件位于同一目录中,并且具有相同的基本文件名。对于 FORMAT SHAPEFILE,LOAD TABLE 和 OPENSTRING ENCODING 选项的缺省值为 ISO-8859-1。
如果指定 FORMAT SHAPEFILE,则只允许使用以下装载选项:
有关 ESRI shapefile 支持的详细信息,请参见对 ESRI shapefile 的支持。
如果指定 FORMAT XML,则只允许使用以下装载选项:
FORMAT XML 子句使用以下参数:
row-xpath 包含 XPath 查询的字符串或变量。XPath 允许您指定描述要查询的 XML 文档结构的模式。此参数中包含的 XPath 模式将从 XML 文档中选择节点。每个与出现在 row-xpath 参数中的 XPath 查询相匹配的节点都将在表中生成一行记录。
元属性只能在 FORMAT XML 子句的 row-xpath 参数中指定。一个元属性可在 XPath 查询中作为一个属性来访问。如果未指定 namespaces,则缺省情况下将前缀 mp 绑定到统一资源定位符(Uniform Resource Identifier,简称 URI)urn:ianywhere-com:sa-xpath-metaprop。如果已指定 namespaces,则此 URI 必须绑定到 mp 或某个其它前缀以访问查询中的元属性。元属性名称区分大小写。支持以下元属性:
@mp:id 返回一个在 XML 文档中唯一的节点的 ID。当数据库服务器重新启动后,给定文档中给定节点的 ID 可能会更改。此元属性的值按文档的顺序递增。
@mp:localname 返回节点名称中的本地部分,如果该节点没有名称则返回 NULL。
@mp:prefix 返回节点名称中的前缀部分,如果该节点没有名称或名称没有前缀则返回 NULL。
@mp:namespaceuri 返回该节点所属的命名空间的 URI,如果该节点不在命名空间中则返回 NULL。
@mp:xmltext 以 XML 形式返回 XML 文档的子树。例如,当匹配了一个内部节点时,可使用此元属性来返回一个 XML 字符串,而不再是下级文本节点的连接值。
column-xpath 指定结果集的模式以及如何为结果集中的每一列找到值的字符串或变量。如果 FORMAT XML 子句表达式匹配多个节点,则只有文档顺序中的第一个节点被使用。如果该节点不是文本节点,则通过附加所有下级文本节点来获得结果。如果一个 FORMAT XML 子句表达式不与任何节点匹配,则该行的列为 NULL。
namespace 包含 XML 文档的字符串或变量。查询的作用域命名空间取自该文档的根元素。
HEXADECIMAL 子句 此子句用于指定是否将二进制值读取为十六进制值。缺省情况下,HEXADECIMAL 为 ON。当 HEXADECIMAL 为 ON 时,二进制列值显示为 0xnnnnnn...,其中 0x 是零后面跟一个 x,每个 n 都是一个十六进制数字。处理多字节字符集时,使用 HEXADECIMAL ON 很重要。
HEXADECIMAL 子句只能与 FORMAT TEXT 子句配合使用。
ORDER 子句 此子句用于指定装载时数据的排序顺序。ORDER 的缺省值为 ON。如果 ORDER 为 ON,并且声明了一个聚簇索引,则 LOAD TABLE 根据聚簇索引排序输入数据,并以相同的顺序插入行。如果要装载的数据已经排序,则应将 ORDER 设置为 OFF。请参见使用聚簇索引。
PCTFREE 子句 此子句用于指定要为每个表页保留的可用空间百分比。此设置将替换表的任何永久设置,但只限于装载过程中以及装载的数据。值 percent-free-space 是一个介于 0 至 100 之间的整数。值 0 指定每页上不留任何可用空间—每页均会填满。如果值很高,会使每行单独插入到页中。有关 PCTFREE 的详细信息,请参见CREATE TABLE 语句。
QUOTE 子句 QUOTE 子句仅适用于 TEXT 数据;string 放置于字符串值的两边。缺省值为单引号(撇号)。
QUOTES 子句 此子句用于指定字符串是否用引号括起来。当 QUOTES 设置为 ON(缺省值)时,LOAD TABLE 语句要求将字符串用引号字符括起来。引号字符是撇号(单引号)或引号(双引号)。字符串中出现的第一个这样的字符将被视为该字符串的引号字符。字符串必须以匹配的引号结束。
当 QUOTES 设置为 ON 时,列分隔符字符串可以包含在列值中。另外,假定引号字符不属于该值的一部分。因此,尽管地址中出现了逗号,以下行也会被视为两个值(而不是三个值)。此外,将地址引起来的引号不会插入到数据库中。
'123 High Street, Anytown',(715)398-2354 |
当 QUOTES 设置为 ON 时,要在值中包括引号字符,必须使用两个引号。以下这个行在第三列中包括一个单引号字符值:
'123 High Street, Anytown','(715)398-2354','''' |
ROW DELIMITED BY 子句
此子句用于指定表示输入记录结束的字符串。缺省分隔符字符串是换行符 (\n);但是它可以是任何长度在 255 字节之内的字符串(如 ROW DELIMITED BY '###'
)。相同的格式要求同样适用于其它 SQL 字符串。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,ROW DELIMITED BY '\x09'
。如果分隔符字符串包含 \n,则它与 \r\n 或 \n 匹配。
SKIP 子句 此子句用于指定是否忽略文件开始位置的行。integer 参数指定要跳过的行数。例如,可以用此子句跳过包含列标题的行。如果行分隔符不是缺省值(换行符),则当数据包含嵌入在带引号的字符串中的行分隔符时,此跳过功能可能无法正常工作。
STRIP 子句 此子句用于指定在插入无引号值之前,是否应去除这些值的前导或尾随空白。STRIP 选项接受以下选项:
STRIP OFF 不去除前导空白或尾随空白。
STRIP LTRIM 去除前导空白。
STRIP RTRIM 去除尾随空白。
STRIP BOTH 去除前导空白和尾随空白。
STRIP ON 不建议使用。等效于 STRIP RTRIM。
WITH CHECKPOINT 子句 此子句用于指定是否执行检查点。缺省设置为 OFF。如果将此子句设置为 ON,则会在成功完成并记录语句之后执行检查点操作。如果将此子句设置为 ON,而且在发出 CHECKPOINT 前数据库需要自动恢复,则必须具有用来装载表的数据文件才能成功完成恢复。如果指定了 WITH CHECKPOINT ON,并且此后需要恢复,则恢复在检查点之后开始,并且不必存在数据文件。
如果数据库损坏,需要使用备份并应用当前的日志文件,则无论此子句的设置情况如何,都需要数据文件。
如果将数据库选项 conversion_error 设置为 Off,则可能会将错误的数据装载到表中而得不到任何错误报告。如果未指定 WITH CHECKPOINT ON,并且数据库需要恢复,则当恢复过程中 conversion_error 为 On(缺省值)时,恢复可能失败。建议不要在 conversion_error 设置为 Off 且未指定 WITH CHECKPOINT ON 时装载表。
有关 conversion_error 选项的详细信息,请参见conversion_error 选项。
WITH { FILE NAME | ROW | CONTENT } LOGGING 此子句用于控制装载操作期间记录到事务日志的信息的详细程度。记录级别如下:
WITH FILE NAME LOGGING 子句 WITH FILE NAME LOGGING 子句使在事务日志中只记录 LOAD TABLE 语句。为保证恢复期间使用事务日志时的结果一致,原始装载操作时所使用的文件必须位于其原始位置,并且必须包含原始数据。此记录级别不影响性能,然而如果数据库参与镜像或同步,则不应使用此级别。此外,从表达式或客户端文件装载数据时也不能使用此级别。
如果没有在 LOAD TABLE 语句中指定记录级别,则指定以下内容时 WITH FILE NAME LOGGING 将为缺省级别:
WITH ROW LOGGING 子句 WITH ROW LOGGING 子句使每个装载的行在事务日志中都作为 INSERT 语句来记录。建议对参与同步的数据库使用此记录级别,另外在数据库镜像时也可以使用此级别。然而,当装载大量数据时,此记录类型可能会影响性能,并导致事务日志过长。
对于要装入的表中包含非确定性值(例如计算列)或 CURRENT TIMESTAMP 缺省值的数据库,这种级别最为理想。
WITH CONTENT LOGGING 子句 WITH CONTENT LOGGING 子句使数据库服务器将要装载的行中的内容合并为块。随后(例如从事务日志恢复数据时)可将这些数据块重组到行中。装载大量数据时,此记录类型对性能影响非常小,并且能提供更完善的数据保护,只是会导致事务日志较长。建议对参与镜像的数据库使用此记录级别,或在不需要维护原始数据文件用于以后恢复的情况下使用。
如果数据库参与同步,则不能使用 WITH CONTENT LOGGING 子句。
如果没有在 LOAD TABLE 语句中指定记录级别,则指定以下内容时 WITH CONTENT LOGGING 将为缺省级别:
USING CLIENT FILE client-filename-expression
USING VALUE value-expression
USING COLUMN column-expression
statistics-limitation-option 用于限制在 LOAD TABLE 执行期间生成统计信息的列。否则,将生成所有列的统计信息。只应在确认在某些列上不使用统计信息后才使用此子句。可以指定 ON ALL COLUMNS(缺省值)、OFF、ON KEY COLUMNS 或为其生成统计信息的列列表。
LOAD TABLE 允许执行从文件到数据库表的高效的大量插入。LOAD TABLE 比 Interactive SQL 语句 INPUT 更有效率。
LOAD TABLE 对整个表进行写锁定。对于基表和全局临时表,执行提交。对于局部临时表,不执行提交。
如果试图对构建了快速文本索引的表或快速视图所引用的表使用 LOAD TABLE,则装载会失败。对于非快速文本索引或实例化视图则不会出现这种情况;但强烈建议您先截断相关索引和实例化视图中的数据,再执行 LOAD TABLE 语句,然后刷新索引和视图。请参见TRUNCATE 语句和TRUNCATE TEXT INDEX 语句。
不要在创建时已指定 ON COMMIT DELETE ROWS 的临时表上使用 LOAD TABLE 语句(无论 ON COMMIT DELETE ROWS 是显式指定的,还是在缺省情况下指定的)。不过,如果已指定 ON COMMIT PRESERVE ROWS 或 NOT TRANSACTIONAL,则可以 使用 LOAD TABLE。
使用 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) 或空字符串 (''),或者返回错误,这要根据列的数据类型而定。
LOAD TABLE 和数据库镜像 如果正在使用数据库镜像并在基表上执行 LOAD TABLE 语句,则必须指定 WITH ROW LOGGING 或 WITH CONTENT LOGGING 作为语句的记录级别。这些子句允许将装载的数据记录在事务日志中,以便也将数据装载到镜像数据库中。如果不指定这些语句,则报告错误。请参见使用 LOAD TABLE 语句导入数据。
LOAD TABLE 和列统计信息 为了创建表列的直方图,LOAD TABLE 在装载数据时捕获列统计信息。优化程序会使用此直方图。有关优化程序如何使用列统计信息的详细信息,请参见优化程序估计值和列统计信息。
以下是有关装载和列统计信息的其它提示:
LOAD TABLE 保存基表的统计信息以备将来使用。它不保存全局临时表的统计信息。
如果要向以前可能包含数据的空表中装载,在执行 LOAD TABLE 语句前删除列的统计信息可能会有益处。请参见DROP STATISTICS 语句。
如果对列执行 LOAD TABLE 时存在列统计信息,将不 会重新计算该列的统计信息。相反,会将新数据的统计信息插入到现有统计信息中。这意味着如果现有列的统计信息已过期,它们在新数据装载到该列后将仍处于过期状态。如果怀疑列统计信息已过期,应该考虑在执行 LOAD TABLE 语句之前或之后更新它们。请参见更新列统计信息以提高优化程序性能。
只有在表具有五个或更多的行时,LOAD TABLE 才会添加统计信息。如果表至少具有五个行,则按如下方式修改直方图:
数据是否已在表中? | 是否存在直方图? | 采取的操作 |
---|---|---|
是 | 是 | 将更改集成到现有直方图 |
是 | 否 | 不生成直方图 |
否 | 是 | 将更改集成到现有直方图 |
否 | 否 | 建立新的直方图 |
对于超过 90% 的上载行,LOAD TABLE 不为包含 NULL 值的列生成统计信息。
使用动态构造的文件名 通过向变量指派文件名,然后在 LOAD TABLE 语句中使用该变量名,可以使用该动态构造的文件名执行 LOAD TABLE 语句。
执行 LOAD TABLE 语句所需的权限取决于数据库服务器的 -gl 选项,如下所示:
如果 -gl 选项设置为 ALL,则您必须是表的所有者,或者具有 DBA 权限或 ALTER 特权。
如果 -gl 选项设置为 DBA,则您必须具有 DBA 权限。
如果 -gl 选项设置为 NONE,则不允许执行 LOAD TABLE。
表需要有独占锁。
从客户端计算机上的文件读取时:
需要 READCLIENTFILE 权限。请参见READCLIENTFILE 特权。
需要具有对从中读取的目录的读取权限。
必须启用 allow_read_client_file 数据库选项。请参见allow_read_client_file 选项。
必须启用 read_client_file 受保护的功能。请参见-sf dbeng12/dbsrv12 服务器选项。
自动提交。
如果没有指定 WITH ROW LOGGING 子句,日志文件中不会记录插入。因此,系统失败时可能无法恢复已插入的行,这取决于记录的类型。此外,决不能在用作 MobiLink 客户端的数据库中或 SQL Remote 复制所涉及的数据库中使用不带 WITH ROW LOGGING 子句的 LOAD TABLE 语句,因为这些技术会通过分析日志文件复制更改。
LOAD TABLE 语句不触发与表关联的任何触发器。
操作开始时会执行检查点操作。如果指定了 WITH CHECKPOINT ON,在结束时会执行第二个检查点。
如果装载了大量数据,则更新列统计信息。
SQL/2008 服务商扩充。
以下是 LOAD TABLE 的示例。首先,创建一个表,然后使用名为 input.txt 的文件将数据装载到表中。
CREATE TABLE t( a CHAR(100), let_me_default INT DEFAULT 1, c CHAR(100) ); |
以下是名为 input.txt 的文件的内容:
ignore_me, this_is_for_column_c, this_is_for_column_a |
以下 LOAD 语句装载名为 input.txt 的文件:
LOAD TABLE T ( filler(), 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 |
以下语句使用动态构造的文件名通过 EXECUTE IMMEDIATE 语句执行 LOAD TABLE 语句:
CREATE PROCEDURE LoadData( IN from_file LONG VARCHAR ) BEGIN DECLARE path LONG VARCHAR; SET path = 'd:\\data\\' || from_file; LOAD TABLE MyTable FROM path; END; |
以下示例将 UTF-8 编码的表数据装载到 mytable 中:
LOAD TABLE mytable FROM 'mytable_data_in_utf8.dat' ENCODING 'UTF-8'; |
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |