Heim > Datenbank > MySQL-Tutorial > Wie können Tabellenvariablen den „IN'-Klauselfehler von SQL Server mit deklarierten Variablen beheben?

Wie können Tabellenvariablen den „IN'-Klauselfehler von SQL Server mit deklarierten Variablen beheben?

Patricia Arquette
Freigeben: 2025-01-09 20:37:42
Original
199 Leute haben es durchsucht

How Can Table Variables Solve SQL Server's

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>
Nach dem Login kopieren

Resultierender Fehler:

<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
Nach dem Login kopieren

Die Lösung: Tabellenvariablen

Um diesen Fehler zu vermeiden, verwenden Sie eine Tabellenvariable zum Speichern der Werte. Tabellenvariablen bieten mehrere Vorteile:

  • Sie speichern strukturierte Daten.
  • Sie können dynamisch ausgefüllt werden.
  • Sie funktionieren wie normale Tabellen in Abfragen.

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:

zu verarbeiten
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage