2016-03-21 8 views
0

Ich muss die ffg-Tabelle mit dem Parameter ID (int) zu der Spalte Id (int) durchsuchen, wenn ID nicht angegeben ist, möchte ich alle Daten von diesem zurückgeben Tabelle. Ich habe diese Abfrage unter versucht:Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Wertes '%'

SELECT * 
FROM TableName 
WHERE Id LIKE ISNULL (@id, '%') 

Aber diese Abfrage gibt den Fehler:

Conversion failed when converting the varchar value '%' to data type int.

Antwort

1

Dies ist, was Sie haben zu tun innen ISNULL:

SELECT * 
FROM TableName 
WHERE ID = ISNULL(@id, ID)) 

wenn hier @id null ist, Die ID (der Spaltenwert selbst) wird zum Vergleich übergeben, die immer übereinstimmt und alle Daten in der Tabelle zurückgibt.

+0

Ich habe das versucht und es hat funktioniert. Vielen Dank! – QKWS

2

Sie vergleichen eine ganze Zahl mit „%“ und Sie auch LIKE verwendet, die beide falsch sind. Sie benötigen diese

SELECT * 
FROM TableName 
WHERE (Id = @id) or (@id is null) 
1

verwenden Dies ist wegen der ISNULL Regel:

replacement_value must be of a type that is implicitly convertible to the type of check_expresssion.

In Ihrem Zustand:

ISNULL(@id, '%') 

Wenn @idNULL ist, versucht SQL Server '%' zu konvertieren zu INT, die den Umwandlungsfehler verursacht.

alle Zeilen zurück, wenn @idNULL ist, können Sie dies tun:

SELECT * 
FROM TableName 
WHERE 
    (Id = @id OR @id IS NULL) 
0

Sie brauchen Id Kaste, weil es integer so tun wie ist:

Where CAST(Id AS TEXT) LIKE '123%') 
+1

Danke für die Antwort. Ich habe versucht, dies zu tun, aber es gibt diesen Fehler "Explizite Konvertierung von Datentyp int in Text ist nicht zulässig." – QKWS

Verwandte Themen