要从 SAP ASE 或 SQL Server 数据库插入数据,请使用 INSERT 语句的 LOCATION 语法。
要直接从 SAP IQ 使用插入数据,必须满足下列所有条件:
INSERT 权限。
INSERT INTO SELECT FROM COMMIT 以提交插入。
当 SAP IQ 连接到远程服务器时, INSERT...LOCATION 还可以对当前连接的用户 ID 使用远程登录,但前提是已使用 CREATE EXTERNLOGIN 创建远程登录,并且已使用 CREATE SERVER 语句定义了远程服务器。 注意 您还可以使用此方法在两个 SAP IQ 数据库之间移动选定列。
SAP IQ 不支持 SAP ASE 数据类型 TEXT,但是您可以从长度大于 255 字节的 IQ CHAR 或 VARCHAR 列,或 LONG VARCHAR 列,和数据类型为 TEXT 的 ASE 数据库列执行 INSERT...LOCATION(语法 3)。如果 SAP IQ 支持内部转换,可将 ASE TEXT 和 IMAGE 列插入到其它 SAP IQ 数据类型的列中。INSERT...LOCATION 不支持在 SELECT 语句中使用变量。缺省情况下,如果远程数据列包含 2 GB 以上的数据,SAP IQ 则会以无提示方式将列值截断为 2 GB。
用户必须获得专门许可才能使用非结构化数据分析功能。
尽管您可以使用大括号 {} 替代分隔 SELECT 语句的单引号,但是在 ODBC 标准中,大括号表示转义序列的开头和结尾,在 ODBC 的上下文中可能会导致产生错误。
以下命令从服务器 detroit 上的 SAP IQ 数据库 iq11db.dba 中将 lineitem 表的 l_shipdate 和 l_orderkey 列中的数据插入到当前数据库的 lineitem 表的相应列中:
INSERT INTO lineitem
(l_shipdate, l_orderkey)
LOCATION 'detroit.iq11db'
{ SELECT l_shipdate, l_orderkey
FROM lineitem }
SELECT 命令中使用 INSERT 语句的谓词,以便仅插入表的某些行中的数据。
此示例(TDS 包大小指定为 512 字节)与上面的示例会插入相同的列,但只针对 l_orderkey 值为 1 的行插入:
INSERT INTO lineitem
(l_shipdate, l_orderkey)
LOCATION 'detroit.iqdb'
PACKETSIZE 512
{ SELECT l_shipdate, l_orderkey
FROM lineitem
WHERE l_orderkey = 1 }