SAP 中 EXECQUERY 语句的语法

可以使用 SAP GUI 通过以图形方式选择要查询的表、要包含在结果集中的列和排序顺序等来创建查询。借助适用于 SAP 的数据提供程序,用户可以通过提供 EXECQUERY 操作从 ADO.NET 应用程序执行此类查询,用户可以使用该操作来执行 SAP 系统中定义的查询。

适用于 SAP 的数据提供程序使用自定义 RFC Z_EXECUTE_SAP_QUERY在 SAP 系统中执行预定义查询。 自定义 RFC 依次执行RSAQ_REMOTE_QUERY_CALL,这是 SAP 系统中定义的标准 RFC。 因此,在使用 EXECQUERY 操作之前,必须在要对其运行查询的 SAP 系统中安装自定义 RFC。 有关如何安装自定义 RFC 的说明,请参阅 为 SAP 数据提供程序安装自定义 RFC

本主题提供有关 EXECQUERY 操作的语法的信息,以及与 EXECQUERY 操作相关的其他有用信息。

EXECQUERY 语句的语法

以下部分介绍针对 SAP 数据提供程序使用 EXECQUERY 操作的语法规范。

EXECQUERY <QueryName> @USERGROUP='usergroup' [, @WORKSPACE='X'] [, @VARIANT='variant']   
[, @P1='<value 1>’] [, @P2='<value 2>'] ... [, @Pn = '<value n>'] [, @P1!='<value 3>'] [, @P1 > '<value 4>'] [, @P1 <= '<value 2>']   
[, NOT @P1 = '<value 2>'] [, NOT @P1 != '<value 2>'] [, NOT @P1 > '<value 2>']   
[, @P1 BETWEEN '<value 1>' AND '<value 2>'] [, NOT @P1 BETWEEN '<value 1>' AND '<value2>’]  
[OPTION 'USEORIGINALCOLUMNNAMES']  
  

其中:

  • <QueryName> 是在 SAP 系统中定义的查询的名称。

  • USERGROUP 是指在其中定义查询的用户组。 这是必需的参数。

  • WORKSPACE 是指在其中定义查询的工作区。 在 SAP 中,有两个工作区 : 标准工作区和全局工作区。 提供一个用于指定标准工作区的空白空间。 提供 X 以指定全局工作区。 默认值为空。

  • VARIANT 是指可在执行 SAP 查询时指定的一组已保存的选择条件。 例如,可以使用变体指定查询的默认值。

  • @Pn 是指 SAP 查询定义中的第 n 选择字段。

  • USEORIGINALCOLUMNNAMES 指定提供程序是否使用 DataSet 中的原始列名,因为它们存在于 SAP 系统中。 默认情况下,提供程序使用 SAP 查询中定义的友好名称。 但是,如果查询中的友好名称不唯一,ADO.NET 客户端将在从 DataSet 读取数据时引发错误。 在这种情况下,必须指定 USEORIGINALCOLUMNNAMES 选项,指示提供程序使用 DataSet 中的原始列名。

    重要

    必须始终在单引号内为 OPTION 关键字 (keyword) 提供值,例如“USEORIGINALCOLUMNNAMES”。

注意

有关 SAP 查询的参数如何转换为 EXECQUERY 语法的信息,请参阅 将 SAP 查询参数转换为 EXECQUERY 命令

为 EXECQUERY 语法建立框架

执行 SAP 查询的 EXECQUERY 操作的帧语法取决于在 SAP 系统中定义查询的方式,包括 SAP 中定义的每个参数值。 有关如何构建 EXECQUERY 语法以执行 SAP 查询的信息,请参阅 将 SAP 查询参数转换为 EXECQUERY 命令

使用 EXECQUERY 操作时的其他注意事项

本部分列出了将 EXECQUERY 语句与适用于 SAP 的数据提供程序配合使用时必须记住的要点。

  • 为 USERGROUP、WORKSPACE 和 VARIANT 指定的值按原样传递到标准 SAP RFC RSAQ_REMOTE_QUERY_CALL。 适用于 SAP 的数据提供程序不会验证为这些参数指定的值。

  • EXECQUERY 操作返回的所有值都是字符串类型。

  • 查询名称、用户组、工作区和变体的关键字不区分大小写。 但是,参数名称必须始终采用大写形式,例如 @P1、 @P2等。例如:

    EXECQUERY xyz USERGROUP=’mygrp’, NOT @P1= 'somevalue'  
    

    等同于

    EXECQUERY xyz uSERgROUP=’mygrp’, NOT @P1= 'somevalue'  
    
  • EXECQUERY 支持的运算符为 >、、 <= >、=、 <!=、NOT 和 BETWEEN。

  • EXECQUERY 操作不支持通配符。 例如,以下语句提供预期的输出:

    EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024',  @P1 = '0000003262',@P2 = 'La Quinta Hotel & Towers'  
    

    但是,使用通配符执行相同的查询会出错。 请注意,@P2使用通配符。

    EXECQUERY ZTEST3 @USERGROUP='SYSTQV000024',  @P1 = '0000003262',@P2 = '*&*'  
    

    在此示例中,可能会收到一条错误,指出找不到任何数据。 这是因为查询将 “*&*” 作为字符串搜索,并且不将星号 (*) 视为通配符。

  • 必须始终以 YYYYMMDD 格式指定日期值。

  • 如果要执行在 SAP 系统中定义了变体的查询,则可以将变体的名称指定为命令的一部分。 例如:

    EXECQUERY myquery @usergroup='mygroup',@variant = 'variant1'  
    

    注意

    如果在 SAP 系统中为查询定义了默认变体,则无需指定变体名称。

另请参阅

使用 mySAP Business Suite 的 .NET Framework 数据提供程序