SQL Server: Verwenden von Tabellenvariablen zur Behebung von „IN“-Klauselfehlern mit deklarierten Variablen
Die SQL Server IN
-Klausel ist ein leistungsstarkes Filtertool. Die Verwendung einer deklarierten Variablen direkt darin führt jedoch häufig zu dem Fehler: „Bei der Konvertierung des Varchar-Werts ‚,‘ in den Datentyp int ist die Konvertierung fehlgeschlagen.“ Dies liegt daran, dass die Variable häufig eine durch Kommas getrennte Zeichenfolge enthält, was zu Datentypkonflikten führt.
Problemszenario:
Bedenken Sie dieses Code-Snippet:
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Resultierender Fehler:
<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
Die Lösung: Tabellenvariablen
Um diesen Fehler zu vermeiden, verwenden Sie eine Tabellenvariable zum Speichern der Werte. Tabellenvariablen bieten mehrere Vorteile:
Dynamisches Auffüllen einer Tabellenvariablen:
Der folgende Code füllt dynamisch eine Tabellenvariable mithilfe einer WHILE
-Schleife auf, um die durch Kommas getrennten Werte in @ExcludedList
:
<code class="language-sql">DECLARE @your_list TABLE (list INT) -- Note: Changed to INT to match Id data type DECLARE @Value VARCHAR(25) DECLARE @Pos INT SET @ExcludedList = '3,4,22' -- Example list SET @Pos = CHARINDEX(',', @ExcludedList) WHILE @Pos > 0 BEGIN SET @Value = SUBSTRING(@ExcludedList, 1, @Pos - 1) INSERT INTO @your_list (list) VALUES (@Value) SET @ExcludedList = SUBSTRING(@ExcludedList, @Pos + 1, LEN(@ExcludedList)) SET @Pos = CHARINDEX(',', @ExcludedList) END IF LEN(@ExcludedList) > 0 BEGIN INSERT INTO @your_list (list) VALUES (@ExcludedList) END SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Anwendung:
Nachdem Sie die Tabellenvariable gefüllt haben, verwenden Sie sie in der IN
-Klausel:
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Dadurch werden Zeilen effizient basierend auf dem @your_list
Inhalt gefiltert. Diese Methode vermeidet Probleme bei der Datentypkonvertierung und ermöglicht dynamische Abfragen mit einer variablen Anzahl von durch Kommas getrennten Werten. Beachten Sie, dass die Spalte list
in @your_list
mit dem Datentyp der Spalte Id
in Tabelle A
übereinstimmen sollte.
Das obige ist der detaillierte Inhalt vonWie können Tabellenvariablen den „IN'-Klauselfehler von SQL Server mit deklarierten Variablen beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!