Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Exec di una stringa

15 views
Skip to first unread message

Darken

unread,
Oct 24, 2003, 10:11:54 AM10/24/03
to
Ho questa Stored procedure:

In input il nome della tabella

In input :
@psnometabella = "Tblprova"

declare @pinewid int
declare @str varchar(50)
set @str = ' SELECT MAX(ID) FROM ' + @PSNOMETABELLA
set @pinewid = exec(@str)

Mi da sintassi non corretta in prossimità di EXEC ...

Come posso mettere il contenuto della mia "Select" composta nella variabile?


AlessandroD

unread,
Oct 24, 2003, 10:28:21 AM10/24/03
to
"Darken" <a...@tin.it> ha scritto nel messaggio
news:eulIhjjm...@TK2MSFTNGP10.phx.gbl...
Devi usare la stored procedure estesa sp_executesql e non l'istruzione exec,
in più la stringa dinamica deve essere di tipo nvarchar (consulta il BOL
circa l'uso di sp_executesql):

declare @str nvarchar (50)
set @str= ' set @intMax= (SELECT MAX(ID) FROM ' + @PSNOMETABELLA + ')'

exec sp_executesql @str, N'@intMax int output', @pinewid output

Ora in @pinewid c'è quello che cerchi.

Ciao, Alessandro


Lorenzo Benaglia

unread,
Oct 24, 2003, 10:32:06 AM10/24/03
to
Darken wrote:
> set @pinewid = exec(@str)
>
> Mi da sintassi non corretta in prossimità di EXEC ...
>
> Come posso mettere il contenuto della mia "Select" composta nella
> variabile?

Ciao Darken,

Come riportano i Books Online, la sintassi dello statement EXEC[UTE] per
l'esecuzione di istruzioni dimaniche è:

EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

Come vedi non è previsto un valore di ritorno, quindi non è possibile
recuperare il valore di MAX(ID) in questo modo.

Inoltre ti ricordo che utilizzando istruzioni SQL dinamiche incorri nel
pericolo di SQL Injection. Per maggiori informazioni leggi lo splendido
articolo del SQL Server MVP Erland Sommarskog "The curse and blessings of
dynamic SQL" http://www.algonet.se/~sommar/dynamic_sql.html

Se il campo ID ha la proprietà IDENTITY e ti interessa recuperare l'ultimo
valore generato per la tabella, potresti ricorrere alla funzione
IDENT_CURRENT().
Per maggiori informazioni leggi il paragrafo IDENT_CURRENT
URL:tsqlref.chm::/ts_ia-iz_82i1.htm sui Books Online.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

0 new messages