ExecuteSQL
目的
在 FileMaker Pro 文件中为指定的表摹本执行 SQL 查询语句。
格式
ExecuteSQL ( sql 查询 ; 字段分隔符 ; 行分隔符 {; 参数...} )
参数
sql 查询 - SQL SELECT 语句。该语句可以包括一个 Union 子句,以结合两次查询的结果。该语句可以包含以编程方式生成的 SQL(动态参数),该 SQL 用于指示查询中将使用可选参数的位置。使用问号字符 (?) 指定动态参数。
字段分隔符 - 用作结果中字段之间的分隔符的字符串。如果指定空字符串,则分隔符为逗号。结果中最后一个字段的后面不显示字段分隔符。
行分隔符 - 用作结果中记录之间的分隔符的字符串。如果指定空字符串,则分隔符为回车符。结果中最后一行的后面不显示行分隔符。
参数 - 要解析的一个或多个
表达式,用作查询语句中动态参数的值。
返回的数据类型
文本
源于
FileMaker Pro 12.0
说明
ExecuteSQL 允许您执行包含动态参数的 SQL SELECT 语句来安全地查询 FileMaker Pro 数据库,以避免可引发注入攻击的安全漏洞。
ExecuteSQL 不会识别在 FileMaker Pro 中创建的关系,这使您可以灵活地在 SQL 语句中定义关系,并从任何表中检索数据,而不受布局上下文的限制。
ExecuteSQL 无法执行会修改数据或数据库架构的 SQL 语句(例如 Insert Into 或 Delete Table 命令)。
如果在查询解析或执行期间发生错误,FileMaker Pro 将返回“?”。
注释
•要向 SQL 查询中的日期应用正确格式,请使用 DATE 语句。如果不使用 DATE 语句,则 ExecuteSQL 会将日期视为文字字符串。
•FileMaker Pro 将返回 Unicode/SQL 格式(而不是操作系统或文件的区域设置)的日期、时间和数值数据。
•ExecuteSQL 仅接受不带花括号的 SQL-92 语法 ISO 日期和时间格式。ExecuteSQL 不接受带有花括号的 ODBC/JDBC 格式日期、时间和时间戳常数。
•FileMaker SQL 使用 Unicode 二进制排序顺序,它不同于用于语言排序或默认中性语言排序顺序的 FileMaker Pro 排序顺序。
示例 1
假设一个数据库包含两个表:“员工”和“薪金”,这两个表通过“员工ID”字段相联系。
注释 “员工::员工ID”、“薪金::员工ID”和“薪金::薪金”字段都是数值字段。
您可以使用 ExecuteSQL 函数从特定记录返回字段值,而不更改当前记录或修改搜索结果。
无论当前记录、搜索结果或布局如何,ExecuteSQL ( "SELECT 部门 FROM 员工 WHERE 员工ID = 1" ; "" ; "" ) 都返回“开发”。
示例 2
假定您要在“员工”表中添加一个字段以显示某个员工的薪金相对于部门总薪金的百分比。尽管您可以在 FileMaker Pro 中使用计算式来生成该值,但还可以使用 ExecuteSQL 函数利用动态参数指定此查询。当指定字段(S.Salary、E.EmpID 和 S.EmpID)时,下面的示例使用“员工”表 (E) 和“薪金”表 (S) 的表别名。
在“员工”表中定义一个计算字段,然后使用 ExecuteSQL 函数指定以下查询语句:
Round (
100 * 薪金::薪金 / ExecuteSQL (
"SELECT SUM ( S.Salary )
FROM 员工 E
JOIN 薪金 S
ON E.EmpID = S.EmpID
WHERE E.Department = ?" ;
"" ; "" ; 员工::部门
) ;
2 )
在每条员工记录上,计算字段都会显示员工的薪金相对于员工所在部门总薪金的百分比。例如,“姓氏”为“Smith”的记录返回“52.97”,“姓氏”为“Mehmet”的记录返回“100”。
相关主题