从外部文件、键盘、ODBC 数据源或 shapefile 向数据库表中导入数据。
INPUT INTO [ owner.]table-name input-options
input-options : [ ( column-name, ... ) ] [ BYTE ORDER MARK { ON | OFF } ] [ COLUMN WIDTHS ( integer, ...) ] [ DELIMITED BY string ] [ ENCODING encoding ] [ ESCAPE CHARACTER character ] [ ESCAPES { ON | OFF } ] [ FORMAT input-format ] [ FROM filename | PROMPT ] [ NOSTRIP ] [ SKIP integer ]
input-format : TEXT | FIXED
encoding : identifier | string
INPUT USING connection-string FROM source-table-name INTO destination-table-name [ CREATE TABLE { ON | OFF } ]
connection-string : { DRIVER=odbc-driver-name | DSN=odbc-data-source } [ ; { connection-parameter = value } ]
INPUT INTO [ owner.]table-name FROM filename FORMAT SHAPEFILE [ SRID srid-number ] [ ENCODING encoding ]
encoding : identifier | string
column-name 使用与输入文件中值的顺序相对应的顺序,列出表中列的名称。此参数适用于表列顺序不同于输入文件中值顺序的情况,或者输入文件中的列数少于表中列数的情况。
BYTE ORDER MARK 子句 此子句用于指定是否处理输入文件中的字节顺序标记 (BOM)。
仅当从 TEXT 格式的文件中读取时,BYTE ORDER MARK 子句才有意义。如果试图将 BYTE ORDER MARK 子句与 FORMAT(而不是 TEXT)子句一起使用,则会导致错误。
仅当读取或写入以 UTF-8 或 UTF-16(及它们的变体)编码的文件时才使用 BYTE ORDER MARK 子句。如果试图将 BYTE ORDER MARK 子句与其它编码一起使用,则会导致错误。
如果指定了 ENCODING 子句:
如果未指定 ENCODING 子句:
COLUMN WIDTHS 子句 COLUMN WIDTHS 子句可指定输入文件中的列宽度,并且只能针对 FIXED 格式指定。如果没有指定 COLUMN WIDTHS,则宽度由数据库的列类型决定。
DELIMITED BY 子句 DELIMITED BY 子句允许指定在 TEXT 输入格式中用作列值间分隔符的字符串。缺省分隔符是逗号。
ENCODING 子句 encoding 参数指定用于读取文件的编码。ENCODING 子句只能与 TEXT 和 SHAPEFILE 格式配合使用。
运行 Interactive SQL 时,按以下顺序确定用于导入数据的编码:
ENCODING 子句指定的编码(如果指定了该子句)。
通过 default_isql_encoding 选项指定的编码(如果设置了此选项)。
如果文件具有字节顺序标记,则使用相应的 Unicode 编码。
当前正在运行的计算机的缺省编码。在英文版 Windows 计算机上,缺省编码是 1252 或 850。
如果使用 OUTPUT 语句创建输入文件并指定了编码,那么在 INPUT 语句中应指定相同的 ENCODING 子句。
ESCAPE CHARACTER 子句 十六进制代码的缺省转义字符是反斜线 (\)。例如,\x0A 是换行符。
换行符可以指定为 \n。其它字符可以使用十六进制 ASCII 代码(如使用 \x09 表示制表符)指定。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 被解释为反斜线和字母 q。
使用 ESCAPE CHARACTER 子句可更改转义字符。例如,要将感叹号用作转义字符,可按如下方式指定:
... ESCAPE CHARACTER '!' |
ESCAPES 子句 ESCAPES 设置为 ON(缺省值)时,数据库服务器会将转义字符后面的字符解释为特殊字符。当 ESCAPES 设置为 OFF 时,会完全按照字符在源代码中的出现方式读取字符。
FORMAT 子句 使用 FORMAT 子句指定输入文件的格式。
如果未指定 FORMAT 子句,则由 input_format 选项来设置格式。缺省设置为 TEXT。还可以通过单击 [工具] » [选项] » [导入/导出] 并在 [缺省导入格式] 字段中指定 [Text] 或 [Fixed] 来指定 Interactive SQL 中的输入格式。
支持的格式包括:
TEXT 将输入行假定为字符,每个输入行占一行,列值以逗号分隔。字母字符串可以用单引号或双引号括起来。包含分隔符的字符串必须用单引号或双引号括起来。如果字符串本身包含单引号或双引号,则字符串内使用的引号字符需要两个。可以使用 DELIMITED BY 子句指定缺省值(逗号)之外的其它分隔符字符串。
另外,还识别其它三个特殊序列。两个字符 \n 代表换行符,\\ 代表单个 \;而序列 \xDD 代表具有十六进制代码 DD 的字符。
省略的值被视为 NULL。如果该位置的值不能为 NULL,则在数字列中插入零,并在字符列中插入空字符串。
FIXED 输入行采用固定格式。使用 COLUMN WIDTHS 子句可指定列的宽度。如果未指定,则文件中的列宽必须与相应数据库列所允许的最大字符数相同。
FIXED 格式不能与包含嵌入式换行符和文件结尾字符序列的二进制列一起使用。
SHAPEFILE Input 的形式为 ESRI shapefile。与 LOAD 语句不同,使用 INPUT 语句装载 shapefile 时,shapefile 必须位于客户端计算机上。相关联的 .shx 和 .dbf 文件必须与 .shp 文件位于同一目录中,并且具有相同的基本文件名。
如果装载 shapefile 时未指定编码,则缺省值为 ISO-8859-1。
使用 SRID 子句指定 SRID 使其与几何关联。如果未指定 SRID,则缺省使用 SRID 0。理想情况下,应该为 shapefile 指定与项目文件 (.prj) 中所提到的相同 SRID。如果该 SRID 不可用,则使用一个等效的。SQL Anywhere 使用 sa_install_feature 系统过程提供了成千上万个可添加到数据库的 SRID。
要使用其它格式,如 DBASE II、DBASE III、FoxPro、Lotus 123 或 Excel 97,请使用 INPUT USING 语句。
FROM filename 子句 filename 可以带引号也可以不带引号。如果字符串带引号,则其遵循的格式要求与其它 SQL 字符串一样。
要指示目录路径,如果路径带引号,则必须使用两个反斜线来表示反斜线字符 (\)。
相关 filename 的位置按以下方式确定:
如果直接在 Interactive SQL 中执行 INPUT 语句,则相对于正在运行 Interactive SQL 的目录解析 filename 的路径。例如,假设您从 c:\work 目录打开 Interactive SQL,并执行以下语句:
INPUT INTO GROUPO.Employees FROM 'inputs\\inputfile.dat'; |
Interactive SQL 将查找 c:\work\inputs\inputfile.dat。
如果 INPUT 语句在 .sql 文件中,则 Interactive SQL 会首先尝试相对于外部文件所在位置来解析 filename 的路径。如果未成功,则 Interactive SQL 会在相对于正运行 Interactive SQL 的目录的路径中查找 filename。
例如,假设存在文件 c:\homework\inputs.sql,它包含以下语句:
INPUT INTO GROUPO.Employees FROM 'inputs\\inputfile.dat'; |
Interactive SQL 会首先在 c:\homework\inputs 中查找 inputfile.dat。如果 Interactive SQL 在该位置没有找到 inputfile.dat,则它会在运行 Interactive SQL 的目录中继续查找。
FROM source-table-name 子句
source-table-name 参数是一个带引号的字符串,它包含源数据库中的表名。表名的形式可以为 database-name.owner.table-name、owner.table-name 或 table-name。在表名中使用句点分隔各个部分,即使它不是源数据库中的本地分隔符。如果源数据库需要数据库名,但不需要所有者名,则 source-table-name 的格式必须为 database..table(在本例中所有者名为空)。不要引用参数中的任何名称。例如,不要使用 'dba."my-table"'
;而应使用 'dba.my-table'
。
PROMPT 子句 用户可使用 PROMPT 子句为一行中的各列逐一输入值。在窗口模式下运行时,会显示一个窗口,允许用户为新行输入值。如果在命令行上运行 Interactive SQL,Interactive SQL 会在命令行提示您为每一列键入值。
NOSTRIP 子句 通常,对于 TEXT 输入格式,在插入值之前,将去除无引号字符串中的尾随空白。NOSTRIP 可用于取消去除尾随空白。不管是否使用此选项,带引号字符串中的尾随空白都不会去除。无论 NOSTRIP 选项的设置如何,无引号字符串中的前导空白都会去除。
SKIP 子句 在 TEXT 文件中插入行时,SKIP 子句将忽略在文件起始处指定数目的行。指定的数目必须是非负整数。SKIP 子句仅用于 TEXT 格式。
如果指定的行数超过了文件中的行数,INPUT 语句不会插入数据并且不返回错误。
USING 子句 USING 子句从 ODBC 数据源输入数据。可以使用 DSN 选项指定 ODBC 数据源名,或用 DRIVER 选项指定 ODBC 驱动程序名和连接参数。connection-parameter 参数是数据库特定的连接参数的列表。
odbc-data-source 参数是用户名称或 ODBC 数据源名称。例如,SQL Anywhere 示例数据库的 odbc-data-source 为 SQL Anywhere 16 Demo。
odbc-driver-name 参数是 ODBC 驱动程序名称。对于 SQL Anywhere 数据库,odbc-driver-name 为 SQL Anywhere 16。对于 UltraLite 数据库,odbc-driver-name 为 UltraLite 16。
INPUT 语句允许向指定的数据库表中进行高效的大量插入。通过输入窗口从用户处读取(如果指定了 PROMPT)或从文件中读取(如果指定了 FROM filename)输入行。如果两者均未指定,则从包含 INPUT 语句的 SQL 脚本文件中读取输入—在 Interactive SQL 中,甚至可以直接从 [SQL 语句] 窗格读取。这种情况下,输入以仅包含字符串 END 的一行结束。
当直接从 [SQL 语句] 窗格读取输入时,必须在要插入到 INPUT 语句结尾处的记录值前指定一个分号。例如:
INPUT INTO Owner.TableName; value1, value2, value3 value1, value2, value3 value1, value2, value3 value1, value2, value3 END |
END 关键字(而不是分号)为不指定文件也不包括 PROMPT 关键字的 INPUT 语句终止数据。
如果指定了列的列表,则数据将插入到指定表的指定列中。缺省情况下,INPUT 语句假定输入文件中的列值显示顺序与它们在数据库表定义中显示的顺序相同。如果表列顺序不同,则必须使用 column-name 参数按照输入文件中的列值顺序列出表列。
缺省情况下,当 INPUT 语句试图插入导致错误的行时会停止。通过设置 on_error 和 conversion_error 选项,可以通过不同的方式来处理错误。
如果在 INPUT 上截断任何字符串值,Interactive SQL 都会在 [消息] 选项卡上输出警告。NOT NULL 列中缺少的值被设置为零(对于数值类型)和空字符串(对于非数值类型)。如果 INPUT 试图插入 NULL 行,则输入文件包含空行。
由于 INPUT 语句是一个 Interactive SQL 命令,所以它不能用于服务器执行的任何语句。
您必须是表的所有者,或具有 INSERT ANY TABLE 系统特权,或者具有表的 INSERT 特权。您还必须具有 SELECT ANY TABLE 系统特权,或具有表的 SELECT 特权。
无。
SQL/2008 服务商扩充。
以下示例将数据从虚构的 TEXT 文件 new_emp.inp 导入到 Employees 表中:
INPUT INTO GROUPO.Employees FROM new_emp.inp FORMAT TEXT; |
以下示例将表 ulTest 复制到名为 saTest 的表中。ulTest 表位于 UltraLite 数据库的文件 C:\test\myULDatabase.udb 中,而 saTest 表是在 demo.db 中创建的:
INPUT USING 'driver=UltraLite 16;dbf=C:\\test\\myULDatabase.udb' FROM "ulTest" INTO "saTest"; |
以下示例将 shapefile 文件 myshapefile.shp 装载到 myTable 表中,并将 SRID 4269 指派给 shapefile 中的几何。
INPUT INTO myTable FROM 'myshapefile.shp' FORMAT SHAPEFILE SRID 4269 |
以下示例将一个新行添加到 Products 表中,并提示用户输入各个列的值。
INPUT INTO GROUPO.Products PROMPT; |
以下示例将数据从文件 c:\temp\input.dat 装载到 Employees 表中。注意如何将反斜线变为双反斜线。
INPUT INTO GROUPO.Employees FROM 'c:\\temp\\input.dat'; |
以下示例创建表 myInventory 并从文件 stock.txt 中导入数据,该文件中所含数据的列顺序与表定义中的不同。要修正顺序不匹配的问题,可使用 INPUT 语句中表名后面的 column-name 参数来指定进行导入时所需的正确列顺序。即,(item, Quantity) 指示 Interactive SQL 获取输入文件中第一列的值,并将其置于表的第二列,然后获取输入文件中第二列的值,并将其置于表的第一列。
CREATE TABLE myInventory ( Quantity INTEGER, item VARCHAR(60) ); INPUT INTO myInventory (item, Quantity) FROM stock.txt; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |