Problema con Stored Procedure in SQL Server

mercoledì 28 giugno 2006 - 18.55

gianp Profilo | Junior Member

In una Stored Procedure uso la seguente istruzione:

Execute ('select ' + @rows + ' = count(*) from '+@TName)

dove @rows è una variabile int che deve contenere il numero di righe della tabella il cui nome è contenuto nella variabile @TName.

Il problema è che ho il seguente errore di sintassi:
Server: messaggio 170, livello 15, stato 1, riga 1
Riga 1: sintassi non corretta in prossimità di '='.

Se invece sempre da dentro la Stored Procedure provo ad eseguire direttamente la query senza ricorrere all'Execute, cioè:

select @rows = count(*) from @TName

ho l'errore: Dichiarare la variabile '@TName'

Come faccio ad aggirare il problema.

Grazie in anticipo.
Saluti Gianp

alx_81 Profilo | Guru

Ciao!
devi utilizzare la storedprocedure di sistema sp_executesql, la quale ti permette di eseguire query dinamiche, anche ritornando valori in output.. fai così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Fammi sapere!!!
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>In una Stored Procedure uso la seguente istruzione:
>
>Execute ('select ' + @rows + ' = count(*) from '+@TName)

Ciao Gianp,

uno dei punti di forza di una stored procedure è quello di essere compilata la prima volta che un certo user account la esegue in un ben determinato contesto (di sicurezza e di configurazione).
Come saprai i nomi delle tabelle non possono essere parametrizzati se non ricorrendo al dynamic SQL (tentativo che tu stesso hai provato a scrivere).
L'esecuzione di codice SQL dinamico comporta la ricompilazione ad ogni chiamata, perdendo in questo modo forse l'aspetto principale che ti ha spinto a ricorrere alle stored procedure.

Erland Sommarskog ha riassunto in questo meraviglioso articolo tutti i pericoli che il dynamic SQL comporta:
http://www.sommarskog.se/dynamic_sql.html

Leggilo con molta attenzione e se possibile evita di utilizzarlo.

>Grazie in anticipo.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gianp Profilo | Junior Member

Grazie ad entrambi.
In effetti ho risolto usando l'istruzione sp_executesql, ma senza le indicazioni "non ortodosse" contenute l'articolo consigliatomi da Lorenzo non credo che sarei riuscito a rosolvere il problema.
Grazie ancora e ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5