Heim > Datenbank > MySQL-Tutorial > Warum verursacht die Verwendung einer VARCHAR-Variablen in einer SQL Server-IN-Klausel einen Konvertierungsfehler?

Warum verursacht die Verwendung einer VARCHAR-Variablen in einer SQL Server-IN-Klausel einen Konvertierungsfehler?

DDD
Freigeben: 2025-01-09 20:42:46
Original
304 Leute haben es durchsucht

Why Does Using a VARCHAR Variable in an SQL Server IN Clause Cause a Conversion Error?

SQL Server IN-Klausel und VARCHAR-Variablen: Ein Leitfaden zur Fehlerbehebung

Problem:

Der folgende SQL Server-Code generiert einen Konvertierungsfehler:

<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX)
SET @ExcludedList = '3, 4, 22' -- Note: Strings are now enclosed in single quotes

SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Nach dem Login kopieren

Erklärung des Fehlers:

Die IN-Klausel erwartet eine durch Kommas getrennte Liste von Werten desselben Datentyps wie die zu vergleichende Spalte (in diesem Fall Id, was vermutlich eine ganze Zahl ist). Die Variable @ExcludedList ist ein VARCHAR(MAX), das eine Zeichenfolge enthält. SQL Server versucht, die gesamte Zeichenfolge implizit in eine Ganzzahl zu konvertieren, was zu einem Fehler führt, da die Zeichenfolge Kommas enthält.

Lösung:

Vermeiden Sie die Verwendung einer Zeichenfolgenvariablen direkt innerhalb der IN-Klausel. Verwenden Sie stattdessen einen Tabellenwertansatz:

<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX)
SET @ExcludedList = '3, 4, 22'

DECLARE @IntExcludedList TABLE (ID INT);
INSERT INTO @IntExcludedList (ID)
SELECT value FROM STRING_SPLIT(@ExcludedList, ',');

SELECT * FROM A WHERE Id NOT IN (SELECT ID FROM @IntExcludedList);</code>
Nach dem Login kopieren

Dieser verbesserte Code nutzt STRING_SPLIT, eine integrierte Funktion, die die durch Kommas getrennte Zeichenfolge effizient in einzelne Zeilen aufteilt. Der Wert jeder Zeile wird dann in die ganzzahlige Tabellenvariable @IntExcludedList eingefügt, um einen korrekten Vergleich mit der Spalte Id zu ermöglichen. Diese Methode verhindert implizite Konvertierungen und stellt sicher, dass die IN-Klausel wie vorgesehen funktioniert. Beachten Sie die Verwendung von einfachen Anführungszeichen um die Zeichenfolgenwerte in @ExcludedList.

Dieser Ansatz ist effizienter und lesbarer als die ursprüngliche Lösung, die SUBSTRING und PATINDEX verwendet. Es nutzt die integrierten String-Manipulationsfunktionen von SQL Server für optimale Leistung.

Das obige ist der detaillierte Inhalt vonWarum verursacht die Verwendung einer VARCHAR-Variablen in einer SQL Server-IN-Klausel einen Konvertierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage