Newsgroup: it.comp.lang.visual-basic
Titolo: Stored Procedure con stringa SQL creata a runtime passata come parametro

Ciao a tutti.
Ho già fatto un po' di prove ma non riesco a capire se non può funzionare 
oppure se sto sbagliando io qualcosa.
Con VB6 creo una stringa SQL a runtime in base alle selezioni che l'utente 
fa nell'interfaccia VB.
Questa stringa viene creata e controllata ed attualmente viene lanciata in 
un recordset ADODB.
Volevo migliorare le prestazioni e desideravo far eseguire questa stringa 
passandola come parametro ad una stored procedure.
Non riesco a far funzionare la cosa e spero che qualcuno abbia qualche idea.
Grazie.
-- 
Advenire IT s.r.l.
Pool Galileo
r.p. Fabio Bertuzzi
Programmatore Visual Basic
Database Designer & Manager
Skype ID : fabiob032 

 Non riesco a far funzionare la cosa e spero che qualcuno abbia qualche idea.
Diciamo che farebbe comodo sapere cosa c'è nella SP e nella stringa.
Se la stringa è un insieme di parametri, che poi la SP si scandisce e 
utilizza come variabili per la propria esecuzione, dovrebbe funzionare.
Non è però possibile utilizzare la stringa come puro e semplice 'pezzo' 
di SQL da eseguire, se non con una esecuzione particolare (vedi Sql 
Dinamico su BOL), all'interno della SP.
Se i parametri sono, volendo fare un esempio banale, dei criteri di 
filtro, non puoi quindi passare alla SP una cosa del tipo
EXECUTE DBO.SP_TROVA_ARTICOLI 'WHERE PREZZO<10 AND PESO>4'
bensì dovrai fare una cosa del tipo:
EXECUTE DBO.SP_TROVA_ARTICOLI DEFAULT, 10, 4, DEFAULT
Dove nella SP hai definito:
CREATE PROCEDURE DBO.SP_TROVA_ARTICOLI
@PREZZO_MINIMO MONEY =NULL,
@PREZZO_MASSIMO MONEY =NULL,
@PESO_MINIMO MONEY =NULL,
@PESO_MASSIMO MONEY =NULL
AS
SELECT ecc.. ecc...
Ciao
Alberto
-- 
A questo punto hanno trovato un muro,
un muro duro, molto molto duro,
che siamo noi.

 che siamo noi.
Beh, grazie comunque.
Se ti viene in mente qualcos'altro, io son qui.


 Campionario potrebbero essere invertiti rispetto l'esempio.
Diciamo che dovresti vedere se *veramente* la cosa è così 
imprevedibile.
Se tu riuscissi (e, credimi, nella quasi totalità dei casi si riesce) a 
definire delle regole precise secondo cui la SP deve ragionare (del 
resto, le stesse regole le utilizzi nel comporre la stringa dinamica), 
molto probabilmente potresti sfruttare le potenzialità delle SP.
Prima fra tutti, proprio il fatto di avere dei Join che cambiano in 
funzione della ricerca. Pensa che casino se la stessa estrazione ti 
serve in n punti del codice, se cambia appena appena un qualcosa nella 
struttura del db. Con la SP, tutto diventa trasparente.
La cosa appena più complessa è il fatto della selezione multipla, cioè 
il caso in cui l'utente può 'spuntare' n elementi di una lista, e la 
query debba restituire i record che corrispondono alle n gamme. Sembra 
complesso, ma in realtà passando alla SP una stringa composta 
dinamicamente con gli elementi, poi la SP se la splitta e popola una 
tabella in ram (del tipo #), al che nella query basterà un Inner Join 
con tale tabella #, e avrai risolto il tutto.
Ma stiamo andando troppo nello specifico, ed è difficile capire come 
adattare ciò che ti serve.


 che siamo noi.
A presto.


 Direi che ad occhio e croce questo risolve il problema.
Non è male, effettivamente.
