Query comportamento anomalo

giovedì 21 giugno 2012 - 17.58
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows Server 2008 R2

dannyv Profilo | Junior Member

USE [hhh] GO /****** Object: StoredProcedure [dbo].[spwin_xyz] ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[spwin_GetCiccio] @a nvarchar(20)=null, @b int =null, @c int=null, @d int=null, @e int=null, @f int=null, @g int=null as declare @sql nvarchar(4000), @paramlist nvarchar(4000) set @sql = ' select * from varie join' if((CHARINDEX('WHERE',@sql))>0) begin if( @a is not null and @a!='') begin set @sql = @sql + ' AND alike @a+''%''' end end else begin if( @ais not null and @a!='') begin set @sql = @sql + ' WHERE a like @a+''%''' end end --faccio lo stesso per b, c, d, e, f, g select @paramlist = '@anvarchar, @b int, @c int, @d int, @e int, @f int, @g int' exec sp_executesql @sql,@paramlist,@a,@b,@c,@d,@e,@f,@g

ciao a tutti..ho questa query che dovrebbe far si che se non passo parametri mi esegue solo la select from, se invece passo uno o più paramtetri mi controlla se esiste già un where e allora mi attacca una seconda clausola altrimenti mi aggiun ge la clausola where.

ho provato a far girare la query passando come parametro a un codice ma il risultato è che la clausola where non viene assolutamente aggiunta..in pratica esegue solo il select from. la stessa query copiata e incollata e aggiunta la clusola where funziona perfettamente... essendo nuovo a questo linguaggio..c è qualcosa che sbaglio?

grazie a tutti

dan

nico839 Profilo | Senior Member

ciao...
set @sql = @sql + ' WHERE a like @a+''%'''

dovrebbe essere

set @sql = @sql + ' WHERE a like ' + @a +'%'
e per gli altri
set @sql = @sql + ' WHERE b = ' + str(@a)
Ciao.
Nicolas

http://perledinico.blogspot.com

dannyv Profilo | Junior Member

if((CHARINDEX('WHERE',@sql))>0) begin if( @a is not null and @a!='') begin set @sql = @sql + ' AND alike @a+''%''' end end else begin if( @ais not null and @a!='') begin set @sql = @sql + ' WHERE a like @a+''%''' end end per b farò if((CHARINDEX('WHERE',@sql))>0) begin if( @b is not null and @b !='') begin set @sql = @sql + ' AND b = @b ' end end else begin if( @b is not null and @b !='') begin set @sql = @sql + ' WHERE b = @b' end end

anche però cambiando come suggeritomi il risultato non cambia...mi salta l' aggiunta o la modifica della clausola where..
ho anche provato a fare where a = @a (invece di a like @a) ma in questo caso mi tira fuori una tabella vuota

:(

nico839 Profilo | Senior Member

ciao,
prova, invece di if( @a is not null and @a!='') a usare

IF (ISNULL(nullif( @a,''),'')='' OR (ltrim(rtrim( @a))) = '')
begin
parte @a null
end
else
begin
parte @a non null
end
mentre per @b che è un numero e non una stringa :
if @b is not null
begin
parte @b non null
end
else
begin
parte @b null
end

Ciao.
Nicolas

http://perledinico.blogspot.com

dannyv Profilo | Junior Member

niente da fare..neanche così...boh proverò a crearmi decine e decine di query semplici cercando di fare più combinazioni possibili di parametri passati..spero che così funzioni

nico839 Profilo | Senior Member

strano perchè l'ho provato, è la stessa cosa che utilizzo in alcune mie query e funziona...prova ad andare in debug e vedere esattamente cosa fa....
Ciao.
Nicolas

http://perledinico.blogspot.com

dannyv Profilo | Junior Member

in pratica mi prende tutte le righe della query e non filtra anche se gli passo i dati esatti

nico839 Profilo | Senior Member

ok, questo è il risultato, ma in debug, riga per riga di codice, che combina? i parametri che gli passi ci sono effettivamente? quando arriva agli IF che fa? la query risultante com'è?
Ciao.
Nicolas

http://perledinico.blogspot.com

dannyv Profilo | Junior Member

non ho i permessi per andare in debug :(

nico839 Profilo | Senior Member

metti dei print e vedi cosa scrive...tipo print @a , print command , print risultato if e vedi....
Ciao.
Nicolas

http://perledinico.blogspot.com

dannyv Profilo | Junior Member

niente..pur mettendo dei print non stampa nulla...mi dispiace scocciarti con questa cosa :(

nico839 Profilo | Senior Member

strano....molto strano....prova a pubblicare gli script per creare le tabelle, inserire un po di dati e il listato della stored procedure che appena ho due minuti ci guardo....
Ciao.
Nicolas

http://perledinico.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5