SQL général : modifications des messages d’erreur pour les sous-requêtes (en attente)

Attention

Ce changement de comportement fait partie du 2026_01 bundle.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Les messages d’erreur des sous-requêtes se comportent de la manière suivante :

Avant la modification:

Lorsqu’une sous-requête renvoie une erreur, le message d’erreur ne contient aucune information spécifique sur le code ou objet SQL.

Après la modification:

Lorsque certaines sous-requêtes renvoient une erreur, le message d’erreur contient des informations spécifiques, telles que les détails suivants :

  • La ligne et la position du code non pris en charge dans la sous-requête.

  • Le nom de l’objet, tel qu’une vue ou une fonction, qui contient la sous-requête non prise en charge. Lorsque des objets sont imbriqués, le nom de l’objet le plus éloigné est renvoyé. Par exemple, si une vue avec une sous-requête non prise en charge est imbriquée dans une vue sécurisée, le message d’erreur indique le nom de la vue sécurisée.

  • Le nom du type d’objet, tel qu’une politique de masquage, qui contient la sous-requête non prise en charge.

Les codes d’erreur liés aux sous-requêtes ne sont pas modifiés.

Note

Ce changement de comportement ne s’applique pas aux sous-requêtes dans les jointures latérales ou dans les fonctions de table définies par l’utilisateur (UDTFs).

Exemples

Les exemples suivants montrent des modifications apportées aux messages d’erreur pour les sous-requêtes.

Créez trois tables et insérez des données dans chacune d’entre elles :

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

Ces tables sont utilisées dans les exemples suivants :

Sous-requête non prise en charge

Exécuter une sous-requête non prise en charge qui renvoie une erreur :

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

Cette requête renvoie une erreur car la colonne corrélée a se trouve dans la clause ON d’une jointure gauche.

Avant le changement de comportement, l’erreur suivante est renvoyée :

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

Après le changement de comportement, l’erreur suivante est renvoyée :

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

Vue sécurisée avec une sous-requête non prise en charge

Créez une vue sécurisée avec une sous-requête non prise en charge et interrogez la vue :

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

Avant le changement de comportement, l’erreur suivante est renvoyée :

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

Après le changement de comportement, l’erreur suivante est renvoyée :

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

Politique de masquage avec une sous-requête non prise en charge

Créer une politique de masquage avec une sous-requête non prise en charge, modifier une table pour utiliser la politique de masquage et interroger la table :

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

Avant le changement de comportement, l’erreur suivante est renvoyée :

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

Après le changement de comportement, l’erreur suivante est renvoyée :

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

Réf : 2140