Newsgroup: it.comp.appl.access
Titolo: SP complessa - Non ne esco

Buongiorno,
ho il seguente problema (che semplifico): due tabelle, relazione 1-m.
Una SP seleziona i record della parte 1, filtrandoli con parametro
relativo alla parte m. Qui ho il problema: Nella parte molti,
ovviamente non ho sempre corrispondenza con la parte 1. Però vorrei
che il risultato della SP restituisse TUTTI i record se non passo un
parametro della parte m (o un parametro null, visto che il parametro lo
imposta una textbox su una maschera), altrimenti SOLO i record
corrispondenti. In realtà, facendo il LEFT OUTER JOIN funziona solo se
non imposto parametri, altrimenti non va. Voglio dire, se imposto un
parametro ma lo passo null non funziona. Ho provato con COALESCE, ma in
realtà non va perchè effettivamente manca il campo, non essendoci il
record corrispondente. Credo di dover creare la stringa a runtime, ma
nache qui concatenando la parte WHERE l'SP segnala inevitabilmente
errori. Insomma, come faccioa filtrare un SP sulla parte molti e
imporle di restituire TUTTA la parte 1 se il parametro non viene
passato?
Spero di essermi spiegato, grazie molte
Marco

 ha scritto nel messaggio
news:1154943181.9...@i42g2000cwa.googlegroups.com...

Ciao Marco,
se ho compreso bene il tuo problema e stiamo parlando di sp in SQL Server
allora prova a guardarti questa applicata al database Northwind
CREATE PROCEDURE  GetOrders (@ID as varchar(5) = NULL)
 AS
IF isnull( @ID, '')=''
  Select *  FROM ORDERS
else
 Select *  FROM ORDERS INNER  JOIN  Customers ON
Orders.CustomerID=Customers.CustomerID
    WHERE Orders.CustomerID = @ID
-- 
Cinzia
---------------------------------------
|  
http://www.riolab.org
  |
---------------------------------------

 Cinzia
Ciao Cinzia, intanto grazie della risposta. mi sembra che la soluzione
(in effetti banale, non so perchè cerco sempre di complicarmi la vita)
potrebbe andare. Io ho diverse tabelle collegate alla master e dei
parametri anche su quella principale. Questa soluzione mi sembra
preveda di scrivere una query per ogni combinazione. Ok, ci provo, per
intanto grazie.
Ciao
Marco

Marco
Ciao Marco,
se devi passare più parametri guarda qui
----
http://www.google.it/groups?threadm=44c0d186$0$989$5fc...@news.tiscali.it
----
la soluzione inibisce l'uso dell'eventuale Index Seek sui filtri della
where, ma se hai 8 parametri cosa fai ? crei 256 query per soddisfare le
combinazioni ?
:-)
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 Giorgio Rancati
Ciao Giorgio, ho guardato il thread e cerco di applicare quello che
suggerisci. Il fatto è che di parametri ne passo solo 3 sulle tabelle
collegate (i parametri su quella principale me li gioco con la
COALESCE) e quindi mi stavo creando le 8 possibili stored procedure.
Fin che sono 8...ma visto che la tua soluzione mi sembra + elegante,
ora la provo, poi ti so dire.
Grazie, siete preziosi....
Marco

giorgio rancati ha scritto:
...
Ciao ancora ,sembra funzionare correttamente, ho dovuto però
sostituire gli INNER JOIN con dei LEFT OUTER JOIN, altrimenti non mi
mostrava tutto.
Grazie ancora, ciao
Marco

Marco
si, certo, se la tua tabella lato1 ha righe che non hanno corrispondenza
nella tabella lato molti e vuoi vederle, č necessario usare una outer join.
Ma questo non c'entra nulla con il metodo di filtraggio proposto,  il filtro
viene valutato dopo la Join
