Warum funktioniert die SQL-Abfrage nicht?
Hallo, kann mir jemand helfen?
Grundidee:
Alle Spalten (ohne die Spalten direkt anzugeben) in einer Tabelle nach einem Wort suchen lassen. Lass das Suchwort hexadezimal sein für eine Eindeutigkeit. Ich führe die Abfrage im SQLer Mkll Version 2.5.6 und in Arc32 aus.
Meine Abfrage lautet schon wie folgt:
DECLARE @SearchWord NVARCHAR(55) = '0x4f';
SELECT
t.name AS Tabellenname,
c.name AS Spaltenname
FROM
sys.tables t
JOIN
sys.columns c ON t.object_id = c.object_id
WHERE
t.name = 'kundenadresse'
AND EXISTS (
SELECT 1
FROM
kundenadresse
WHERE CAST(c.name AS NVARCHAR(MAX)) LIKE '%' + @SearchWord + '%'
);
Nun kommt der Fehler:
poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2115; [SAP][Advantage SQL Engine]Expected lexical element not found: expecting <;> or <,> but found <=> -- Location of error in the SQL statement is: 34
Es scheint als würde er das = nicht verstehen.
Hat jemand eine andere Lösung oder Fehler in der Abfrage gefunden?
Vielen Dank schon einmal im Voraus!
2 Antworten
Der Fehler, den du bekommst, tritt auf, weil du den Vergleichsoperator LIKE in Kombination mit dem = Operator in der WHERE-Klausel verwendest. SQL interpretiert das = Zeichen in der Zeile CAST(c.name AS NVARCHAR(MAX)) LIKE '%' + @SearchWord + '%' als ein Versuch, eine Bedingung wie = zu verwenden, und das führt zu einem Syntaxfehler.
DECLARE @SearchWord NVARCHAR(55) = '0x4f';
SELECT
t.name AS Tabellenname,
c.name AS Spaltenname
FROM
sys.tables t
JOIN
sys.columns c ON t.object_id = c.object_id
WHERE
t.name = 'kundenadresse'
AND EXISTS (
SELECT 1
FROM
kundenadresse
WHERE CHARINDEX(@SearchWord, CONVERT(NVARCHAR(MAX), c.name, 1)) > 0
);
Denke mal habe soeben das Problem gelöst. Nun jetzt meckert er unten im Where Charindex rum:
SQL1 (DD Remote 12.0) Fehler:
AdsQuery1: Error 7200: AQE Error: State = 42000; NativeError = 2115; [SAP][Advantage SQL Engine]Expected lexical element not found: <identifier> -- Missing table name. There was a problem parsing the table names after the FROM keyword. There was a problem parsing the WHERE clause. -- Location of error in the SQL statement is: 259 (line: 16 column: 5)
Mag wohl nicht, wie du die Variable deklarierst.
Gibt Alternativen: https://www.sqlshack.com/sql-variables-basics-and-usage/
Nun der Fehler Code besteht weiter hin. Kann es an allen = liegen?, denn irgendwas stimmt in Position 34 wieder nicht. Ich habe mal versucht: Sobald ich oben im Declare das = weg nehme meckert er rum bzw. gibt eine neue Fehlermeldung, das heißt es liegt an dem = dort. Was kann ich machen oder ausprobieren? Danke für deine vorherige Antwort!