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 系统中为查询定义了默认变体,则无需指定变体名称。