SQL general: Changes to error messages for subqueries (Pending)

注意

此行为变更包含在 2026_01 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

子查询的错误消息表现如下:

变更前:

当子查询返回错误时,错误消息不包含有关 SQL 代码或对象的特定信息。

变更后:

当某些子查询返回错误时,错误消息包含特定信息,例如以下详细信息:

  • 子查询中不受支持的代码所在的行号和位置。

  • 包含不受支持子查询的对象的名称(例如视图或函数)。当对象嵌套时,返回最外层对象的名称。例如,如果包含不受支持子查询的视图嵌套在安全视图中,则错误消息会显示该安全视图的名称。

  • 包含不受支持子查询的对象类型的名称,例如掩码策略。

与子查询相关的错误代码没有变化。

备注

此行为变更不适用于横向联接或用户定义表函数 (UDTFs) 中的子查询。

示例

以下示例显示了子查询错误消息的变更。

创建三个表并向其中每个表插入数据:

CREATE TABLE testsub1(a INT, b INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

CREATE TABLE testsub2(x INT, y INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

CREATE TABLE testsub3(u INT, v INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);
Copy

这些表用于以下示例:

不支持的子查询

运行返回错误的不受支持的子查询:

SELECT *
  FROM testsub1
  WHERE a IN(
    SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
  );
Copy

此查询返回错误,因为相关列 a 位于左联接的 ON 子句中。

在行为变更之前,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

行为变更后,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated at line 4, position 4

具有不受支持子查询的安全视图

使用不受支持的子查询创建安全视图,然后查询该视图:

CREATE SECURE VIEW svw
  AS SELECT *
    FROM testsub1
    WHERE a IN (
      SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u);

SELECT * FROM svw;
Copy

在行为变更之前,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

行为变更后,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside VIEW object: SVW

具有不受支持子查询的掩码策略

使用不受支持的子查询创建掩码策略,更改表以应用该掩码策略,然后查询表:

CREATE MASKING POLICY mp AS
  (i INT) RETURNS INT -> IFF(i < (SELECT MAX(a) FROM svw), i, -1);

CREATE TABLE masked_testsub1(a INT, b INT)
  AS SELECT * FROM VALUES
    (1, 1),
    (2, 2),
    (NULL, NULL);

ALTER TABLE masked_testsub1
  ALTER COLUMN a SET MASKING POLICY mp;

SELECT * FROM masked_testsub1;
Copy

在行为变更之前,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated

行为变更后,将返回以下错误:

002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside MASKING POLICY

参考:2140

语言: 中文