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);
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
);
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;
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;
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