Newsgroup: it.comp.www.asp
Titolo: stored procedures

Qualcuno mi puo' aiutare.?
Sto impazzendo nel creare una stored procedure in MS SQL da lanciare da
pagine ASP
voglio passare alla S.P. i parametri della stringa SQL (cosa, nome_tabella,
campo, operatore, valore)
Se passo tutta la stringa già montata, funziona, se passo + di 1 pezzo mi da
errore
O meglio, se passo
===========
Stringa = "Select * From tabella Where xx = 25"
R1.open "Exec Prova " &Stringa, connection
con questa S.P. funziona
CREATE procedure Prova
@WhereString varchar(500)=''
AS
DECLARE @SQL varchar(2500)
Select @SQL=@WhereString
execute(@SQL)
GO
===========
 ma se passo i 5 valori separati, a quest'altra sotto mi da errore
(ovviamente se è una stringa la passo tra apici)
Cosa = "*"
Tabella ="miatabella"
Campo = "Stato"
Oper= "="
Valore = "'Italia'"
R1.open "Exec Prova "&Cosa&","&Tabella&","&Campo&","&Oper&","&Valore,
connection
err. incorrect syntax near  '*'
CREATE procedure Prova
@Cosa varchar(500)='',
@Tabella varchar(500)='',
@Campo=varchar(500)='',
@Oper = char(4)='',
@Valore varchar(500)=''
AS
DECLARE @SQL varchar(2500)
Select @SQL='SELECT '+@Cosa+' FROM '+@Tabella+ 'WHERE '@Campo +@Oper+@Valore
execute(@SQL)
GO
Qualcuno ha suggerimenti?
Grazie

Metti un bel
print @SQL
-- execute(@SQL)
Lanciala da query analizer e vedi se la sintassi della stringa finale è
corretta.
Qunate tabelle possibili hai? Hai provato ad un modo più "consono" che non
sia passare SQL dinamico alla procedura (il che ne riduce di molto non solo
i vantaggi ma la modularità)
In alcuni casi può essere una eccezione quasi indispensabile ma hai
analizzato bene che non ci sia un altro modo?
Anche perchè passando valori in questo modo cmq devi sempre verificare tutti
i caratteri speciali (apici, %, ecc.)
-- 
:: Massimiliano Mattei
:: Project Leader
:: EVA Group :: 
www.evagroup.net
:: Soluzioni extranet :: e-business :: corporate portal

 ha scritto nel messaggio
news:c7tok2$3gv$1...@lacerta.tiscalinet.it...


>Dice "The command(s) completed successfully"
Strano...
Allora prova sempre da query analizer ad eseguire il debug.
Nella colonna di sinistr, hai tutti i database, espandi il tuo, espandi le
stored procedures cerca la tua e con il tasto destro lanica il debug (ultima
opzione in lista)
Assegna i valori e poi fallo partite step-by-step e vedi quale valore assume
la tua stringa SQL dopo le varie assegnazioni.
Per assegnare le variabili puoi usare anche SET al posto di SELECT a scanso
equivoci..
Poi rispetto al resto non conviene usare una procedura che ti fa INSERT /
UPDATE / SELECT se devi usare SQL dinamico.
Come ti dicevo priam ti perdi tutti i vantaggi. Se vuoi usare una procedura
del genere, meglio usare dei flag es: (@COMANDO tinyint) dove magari 1 =
INSERT / 2 = UPDATE ecc. però per sfruttare al meglio i piani di
compilazione cerca di evitare SQL Dinamico.
Inoltre un vantaggio delle procedure è che se richiami la stessa da più
pagine, ti basta cambiare la procedura per aggiornare il risultato in tutte
le pagine, con SQL dinamico ti perdi anche questo vantaggio.
IN definitiva da usare solo dove e quando strettamente necessario, meglio
sforzarsi di entrare in una "nuova ottica" e magari faticare un pò
all'inzio.
