Fehler bei der Konvertierung beim konvertieren den varchar-Wert '1,' in den int-Datentyp
Ich habe die Tabelle Kategorien (c) und einer anderen Tabelle (x), die eine Spalte enthalten kann cat-IDs, getrennt mit Komma als varchar-Datentyp. Ich möchten Wählen Sie passende Kategorien, aber ich bin mit Fehlermeldung "Fehler bei der Konvertierung beim konvertieren den varchar-Wert '5,' in den int-Datentyp.", wenn Sie versuchen zu wählen:
SELECT ID, Title FROM c WHERE ID IN (SELECT catIDs FROM x WHERE ID=any);
Der subquery Daten, z.B. "1,3,4"
- Was passiert, wenn Sie ersetzen, WOBEI ID mit, WO CAST(ID as varchar(5))?
- Ich Stimme mit @Traroth - Liste von IDs zurück, wie ein string mit Komma-getrennten Werten legt nahe ein problem mit der Datenbank-design. Ist es wirklich die
catIDs
Spalte in derx
Tabelle? Oder vielleicht ist dies nur ein Beispiel und1,3,4
ist tatsächlich zurückgekehrt aus gespeicherten rpocedure oder abgerufen werden, von einer flachen Datei? - Es funktioniert aber nicht zurückgeben richtigen Ergebnis, weil es auf der Suche nach 'x, y', nicht 'x', 'y'
- Nice one @Carnotaurus, anstelle der Ergebnis der select-in ein int wandeln Sie die ID mit dem Wert in einen varchar. Funktioniert wie ein Charme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie nach split die
1,3,4
string zurückgegeben, die von der Unterabfrage in separateint
Werte. SQL Server verfügt nicht über eine eingebaute Funktion, um es zu tun, aber Sie können diese Benutzer-definierten Funktion.Erstellen Sie die Funktion
dbo.Split
in Ihrer Datenbank und dann neu schreiben Sie Ihre Abfrage wie folgt:Ersetzte ich die Unterabfrage mit dem Beispiel ergibt
1,3,4
verkürzen Sie die Abfrage, und machen es leichter zu verstehen.Wenn ich Sie Recht haben, haben Sie eigentlich Werte wie z.B. "1,3,4" in der Spalte catIDs. So sollten Sie extrahieren einer Teilzeichenfolge in der wählen Sie Ihre Unterabfrage.
Übrigens, ich bin nicht ein MS-SQL-Server-Experte, aber es ist wohl ein schlechtes Datenbank-design zu tun. Ich bin nicht sicher, dass der RDBMS-engine verwenden, Indizes in einem solchen Fall...