it-swarm.com.de

Verwendung des LIKE-Operators mit Parametern gespeicherter Prozeduren

Ich habe eine gespeicherte Prozedur, die den Operator LIKE verwendet, um unter einigen anderen Parametern nach einem LKW-Standort zu suchen

   @location nchar(20),
   @time time,
   @date date
AS
   select 
       DonationsTruck.VechileId, Phone, Location, [Date], [Time]
   from 
       Vechile, DonationsTruck
    where 
       Vechile.VechileId = DonationsTruck.VechileId
       and (((Location like '%'[email protected]+'%') or (Location like '%'[email protected]) or (Location like @location+'%') ) or [Date][email protected] or [Time] = @time)

Ich habe die anderen Parameter auf Null gesetzt und suche nur nach Ort, aber es werden immer keine Ergebnisse zurückgegeben, selbst wenn ich den vollständigen Namen des Ortes verwendet habe

15
Scarnet

Ihr Datentyp für @location nchar(20) sollte @location nvarchar(20) sein, da nChar eine feste Länge hat (mit Leerzeichen gefüllt).
Wenn Location ebenfalls nchar ist, müssen Sie es konvertieren:

 ... Cast(Location as nVarchar(200)) like '%'[email protected]+'%' ...   

Um nullbare Parameter mit der Bedingung und AND zu aktivieren, verwenden Sie zum Vergleich einfach IsNull oder Coalesce, was in Ihrem Beispiel mit OR nicht erforderlich ist.

z.B. Wenn Sie für Ort UND Datum und Uhrzeit vergleichen möchten.

@location nchar(20),
@time time,
@date date
as
select DonationsTruck.VechileId, Phone, Location, [Date], [Time]
from Vechile, DonationsTruck
where Vechile.VechileId = DonationsTruck.VechileId
and (((Location like '%'+IsNull(@location,Location)+'%')) and [Date]=IsNUll(@date,date) and [Time] = IsNull(@time,Time))
32
bummi

Ich habe daran gearbeitet. Überprüfen Sie die folgende Aussage. Arbeitete für mich !!


SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'
2
Singh T