Angesichts der Beispieldaten:
CREATE TABLE dbo.Data
(
ID integer PRIMARY KEY,
A0 character(1) NULL,
A1 character(1) NULL,
A2 character(1) NULL,
A3 character(1) NULL,
A4 character(1) NULL
);
INSERT dbo.Data
(ID, A0, A1, A2, A3, A4)
VALUES
(14, 'A', 'B', 'A', 'C', 'A'),
(15, 'A', 'A', 'A', 'A', 'A');
Eine alternative Möglichkeit, alle Nicht-ID-Spalten auf Gleichheit zu vergleichen, ist:
SELECT
D.*
FROM dbo.Data AS D
WHERE EXISTS
(
-- All columns except the last one
SELECT D.A0, D.A1, D.A2, D.A3
INTERSECT
-- All columns except the first one
SELECT D.A1, D.A2, D.A3, D.A4
);
Wenn viele Spalten vorhanden sind, ist dies möglicherweise einfacher zu schreiben als eine Abfrage mit mehreren ANDKlauseln (und häufig kompakter). In Management Studio können Sie den Knoten Spalten aus dem Objekt-Explorer in ein Textfenster ziehen, um eine durch Kommas getrennte Spaltenliste zu erstellen. Das Versetzen dieser Liste für den zweiten Teil von INTERSECTist ebenfalls trivial.
Der durch diese Abfrage generierte Ausführungsplan ist genauso effizient wie die ANDVersion mit mehreren Klauseln. Semantisch unterscheidet es sich geringfügig darin, dass NULLDatenelemente gleich miteinander verglichen werden.
