Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Costruire un SQL dentro una stored-procedure

Lo so, sono parzialmente OT, ma qui c'è tanta brava gente, perdonatemi....
Normalmente, in visual-basic mi costruisco un costrutto SQL
dinamico......esempio:
SQL = "SELECT * FROM Denominazione WHERE ID>0"
If Me.txtAnagrafica <> "" Then
    SQL = SQL & " AND Denominazione Like '%" & Me.txtAnagrafica & "'"
End If
<niubbi>usate la Replace$(Me.txtAnagrafica,"'","''") per evitare
problemi</niubbi>
ok. vorrei ottenere la stessa logica dentro una stored-procedure sotto
sql-server:
DECLARE PROCEDURE Pippo
@Nome varchar(100)
AS
DECLARE @sql varchar(100)
vorrei costruire dentro @sql il mio bravo costrutto SQL in base ai parametri
in ingresso della sp stessa. come faccio a ottenere lo stesso risultato?
posso? è possibile?
ho qualche libro su sqlserver, ma parlano di amministrazione dei database ma
non di programmazione. mi date una mano, grazie!!!
good coding!!!
-- 
Alletun
Sorry, ask me if you want to get my e-mail!

Il 15/04/2004 22.40, Alletun scrisse:

Non so se ti do una mano, ma qui dovrebbe esserci tutto cio' che ti serve:
CREATE    PROC sp_internazionali_costi
	@tmpTable sysname,
	@inizio nvarchar(12),
	@fine nvarchar(12),
	@centrale smallint,
	@dcentrale nvarchar(50),
	@dprefisso nvarchar(50),
	@risposta varchar(256),
	@CP varchar(10),
	@tarIni nvarchar(12),
	@tarfine nvarchar(12),
	@rsql varchar(8000) OUTPUT
AS
 
DECLARE @sql AS VARCHAR(8000)
DECLARE @tmpselect AS varchar(8000)
set @tmpselect= 'SELECT centrali.descrizione as Centrale,
	prefissi.numero AS Prefisso,
	sum(tblwintel.TempoConn) AS costo
FROM ((tabella INNER JOIN centrali
	ON centrali.codice=tabella.ChannelNum)
	left join prefissi as P1 ON p1.tipo=3)
left JOIN prefissi ON
	prefissi.tipo=1
WHERE (tabella.NumTelChiamato LIKE p1.numero + prefissi.numero + ''%'')
	AND data2>=CONVERT(DATETIME,''' + @inizio + ''',102) AND 
data2<=CONVERT(DATETIME,''' + @fine + ''',102)'
IF (@risposta='')
	   set @tmpselect = @tmpselect + ' AND data2>=CONVERT(DATETIME,''' + 
@tarIni + ''',102) AND data2<=CONVERT(DATETIME,''' + @tarfine + ''',102) '
ELSE
	   set @tmpselect = @tmpselect + ' AND data2>=CONVERT(DATETIME,''' + 
@tarIni + ''',102) '
IF (@centrale<>0)
	set @tmpselect = @tmpselect + ' AND centrali.codice=' + cast(@centrale 
as varchar)
if (@CP<>'_NULLO_')
set @tmpselect = @tmpselect + ' AND  p1.numero=''' + @CP + ''''
set @tmpselect = @tmpselect + ' AND  prefissi.numero=''' + @dprefisso + ''''
set @tmpselect=@tmpselect +
'  AND tabella.tempoConn<>0 AND substring(tabella.CodInterno,5,1)<>''0''
GROUP BY centrali.descrizione,prefissi.numero
ORDER BY centrali.descrizione,prefissi.numero'
exec(@tmpselect)
ciao
	maxx
P.S. Copiala in un editor che evidenzia la sintassi sql...
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!


CREATE PROCEDURE [Pippo]
@tuo_testo(50)
AS
DECLARE @s_Sql varchar(1500)
set @s_Sql= 'SELECT * FROM tabella WHERE tuocampo=''' + @tuo_testo + '''
ORDER BY gino'
EXEC (@s_Sql)
dove @tuo_testo è un parametro in ingresso della SP
ciaociao (e good coding!) ;-)

 ha scritto nel messaggio
news:c5ms0h$3ir81$1...@ID-134521.news.uni-berlin.de...
grazie a tutti e due.....è proprio quello che mi serviva......
non sapevo ci fosse EXEC per lanciare un sql che voglio io.....
;-)))
good coding!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King

 good coding!!!
Con le SP puoi fare un sacco di cosine....:)
hai provato a dare un'occhiata alle SP di sistema? ci sono cicli, gestioni
degli errori, transazioni ecc.
ciaociao

Emmex ti ha già fatto tutto ...
al di là di qualche cambiamento di sintassi per le stringhe dove
la concatenazione la fai con il + e non con l'& ... direi che
puoi fare tutto come fai come in vb ...
certo la mid si chiama substring ... la replace rimane uguale ...
ma già con il BOL fai tutto.
CIao
Andrea