2013-05-05 17 views
12

Ho una stored procedure che utilizza l'operatore LIKE per cercare una posizione camion tra alcuni altri parametriUtilizzando operatore LIKE con stored procedure parametri

@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) 

ho nullo gli altri parametri e solo cercare attraverso il luogo, ma sempre non restituisce risultati anche quando ho utilizzato il nome completo della posizione

+1

per gestire correttamente i valori NULL è necessario controllare per esso in modo esplicito, ad esempio, '([Date] = @Date o @Date è NULL)'. A proposito, devi solo controllare '%' + @location + '%' ', gli altri due test di localizzazione sono ridondanti. – HABO

+1

[Cattive abitudini da calciare: utilizzando JOIN vecchio stile] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - quello stile vecchio * comma di tabelle tabelle separate * stile è stato interrotto con ANSI - ** 92 ** SQL Standard (più di ** 20 anni ** fa) –

risposta

25

Il tipo di dati per @location nchar(20) deve essere @location nvarchar(20), poiché nChar ha una lunghezza fissa (piena di spazi).
Se la posizione è troppo nchar si dovrà convertirlo:

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

Per attivare i parametri nullable con e AND condizione basta usare IsNull o COALESCE per il confronto, che non è necessario nel tuo esempio utilizzando OR.

ad es. se vuoi confrontare per Location AND Date and Time.

@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)) 
+0

+1 grazie amico ha funzionato per me –

+0

La posizione come '%' + IsNull (@ location, Location) + '%') restituirà tutti i record se il parametro location è nullo, il che potrebbe non essere il comportamento desiderato. la domanda è se non ci sono criteri di ricerca (se il parametro posizione nullo non considera nessun criterio di ricerca) passati, se l'SP restituisce tutto o niente? (si prega di correggere qui la restrizione dei commenti, se si mette il parametro con @ symble, S.O. penserà che sia a qualcuno :) – koo9

-3

EG: Confrontare al frazione

ALTER PROCEDURE POSMAST 
(@COLUMN_NAME VARCHAR(50)) 
AS 
SELECT * FROM TABLE_NAME 
WHERE 
village_name LIKE + @VILLAGE_NAME + '%'; 
0

stavo lavorando sullo stesso. Controlla sotto la dichiarazione. Ha funzionato per me !!


SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%' 
Problemi correlati