SQL allgemein: Änderungen an Fehlermeldungen für Unterabfragen (Ausstehend)¶
Achtung
Diese Verhaltensänderung ist in Bundle 2026_01 enthalten.
Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.
Fehlermeldungen für Unterabfragen verhalten sich wie folgt:
- Vor der Änderung:
Wenn eine Unterabfrage einen Fehler zurückgibt, enthält die Fehlermeldung keine spezifischen Informationen über den SQL-Code oder das Objekt.
- Nach der Änderung:
Wenn einige Unterabfragen einen Fehler zurückgeben, enthält die Fehlermeldung bestimmte Informationen, wie z. B. die folgenden Details:
Die Zeile und Position des nicht unterstützten Codes in der Unterabfrage.
Der Name des Objekts, z. B. einer Ansicht oder Funktion, welche die nicht unterstützte Unterabfrage enthält. Wenn Objekte verschachtelt sind, wird der Name des äußersten Objekts zurückgegeben. Wenn beispielsweise eine Ansicht mit einer nicht unterstützten Unterabfrage in einer sicheren Ansicht verschachtelt ist, zeigt die Fehlermeldung den Namen der sicheren Ansicht an.
Der Name des Objekttyps, z. B. eine Maskierungsrichtlinie, der die nicht unterstützte Unterabfrage enthält.
Es gibt keine Änderungen an den Fehlercodes im Zusammenhang mit Unterabfragen.
Bemerkung
Diese Verhaltensänderung gilt nicht für Unterabfragen in seitlichen Verknüpfungen (Lateral Joins) oder benutzerdefinierten Tabellenfunktionen (UDTFs).
Beispiele¶
Die folgenden Beispiele zeigen Änderungen an den Fehlermeldungen für Unterabfragen.
Erstellen Sie drei Tabellen, und fügen Sie in jede von ihnen Daten ein:
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);
Diese Tabellen werden in den folgenden Beispielen verwendet:
Nicht unterstützte Unterabfrage¶
Führen Sie eine nicht unterstützte Unterabfrage aus, die einen Fehler zurückgibt:
SELECT *
FROM testsub1
WHERE a IN(
SELECT x FROM testsub2 LEFT JOIN testsub3 ON x+a = u
);
Diese Abfrage gibt einen Fehler zurück, da sich die korrelierte Spalte a in der ON-Klausel einer linken Verknüpfung befindet.
Vor der Verhaltensänderung wurde der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Nach der Verhaltensänderung wird der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated at line 4, position 4
Sichere Ansicht mit einer nicht unterstützten Unterabfrage¶
Erstellen Sie eine sichere Ansicht mit einer nicht unterstützten Unterabfrage, und fragen Sie die Ansicht ab:
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;
Vor der Verhaltensänderung wurde der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Nach der Verhaltensänderung wird der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside VIEW object: SVW
Maskierungsrichtlinie mit einer nicht unterstützten Unterabfrage¶
Erstellen Sie eine Maskierungsrichtlinie mit einer nicht unterstützten Unterabfrage, ändern Sie eine Tabelle, um die Maskierungsrichtlinie zu verwenden, und fragen Sie die Tabelle ab:
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;
Vor der Verhaltensänderung wurde der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated
Nach der Verhaltensänderung wird der folgende Fehler zurückgegeben:
002031 (42601): SQL compilation error:
Unsupported subquery type cannot be evaluated inside MASKING POLICY
Ref: 2140