您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

直接从 Adaptive Server Enterprise 插入数据

要从 SAP ASE 或 SQL Server 数据库插入数据,请使用 INSERT 语句的 LOCATION 语法。

要直接从 SAP IQ 使用插入数据,必须满足下列所有条件:

  • SAP IQ 连接库必须安装在您的系统上,并且您的平台上的装载库路径环境变量必须指向它们。

  • 您所连接到的 SAP ASE 服务器必须存在于本地计算机上的 interfaces 文件中。

  • 您必须对源 ASE 或 SAP IQ 数据库具有读取权限,并对目标 SAP IQ 数据库具有 INSERT 权限。

  1. 使用相同的用户 ID 和口令连接到 SAP ASE 和 SAP IQ 数据库。

  1. 在 SAP IQ 数据库上,发出: INSERT INTO  LOCATION '' { SELECT , , ,...FROM . } 

  1. 发出 COMMIT 以提交插入。

    当 SAP IQ 连接到远程服务器时, INSERT...LOCATION 还可以对当前连接的用户 ID 使用远程登录,但前提是已使用 CREATE EXTERNLOGIN 创建远程登录,并且已使用 CREATE SERVER 语句定义了远程服务器。 注意 您还可以使用此方法在两个 SAP IQ 数据库之间移动选定列。

    装载 ASE 文本和图像

    SAP IQ 不支持 SAP ASE 数据类型 TEXT,但是您可以从长度大于 255 字节的 IQ CHARVARCHAR 列,或 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 }