Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Problemi con tabelle temporanee in function
lunedì 13 luglio 2009 - 15.17
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
cicemoi
Profilo
| Junior Member
72
messaggi | Data Invio:
lun 13 lug 2009 - 15:17
Salve,
ho creato una funzione che in base in base ai suoi parametri in ingresso fa un query che ritorna una serie di record da un campo che dovrei concatenare e restituire all'utente sotto forma di stringa
sto procedendo in questo modo:
set @strsql = 'select descrizione from ' + @tabBusiness + ' where id_' + @campoIdTabella + ' in (' + @listInfo + ') '
create table #tmpBus
(
descrizione varchar(50) COLLATE Latin1_General_CI_AS
)
insert into #tmpBus exec sp_executesql @strsql
set @strsql = 'select * from #tmpBus '
EXECUTE sp_executesql @strsql
DECLARE cursoreItems INSENSITIVE cursor for
select * from #tmpBus
OPEN cursoreItems
FETCH NEXT
FROM cursoreItems
INTO @descrizioneItem
WHILE @@FETCH_STATUS = 0
BEGIN
set @info = @info + @descrizioneItem + ','
FETCH NEXT
FROM cursoreItems
INTO @descrizioneItem
end
drop table #tmpBus
sembra tutto corretto ma nel momento in cui lo inserisco nella funzione mi da il seguente errore "Cannot access temporary tables from within a function"
Come posso ovviare questo problema?????
grazie mille
Cinzia Cipriano
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 13 lug 2009 - 21:51
>sembra tutto corretto ma nel momento in cui lo inserisco nella
>funzione mi da il seguente errore "Cannot access temporary tables
>from within a function"
>Come posso ovviare questo problema?????
Ciao Cinzia,
All'interno di una UDF non può né usare il dynamic SQL né definire e/o accedere a tabelle temporanee.
Inoltre il concatenamento di stringhe puoi ottenerlo in modo più elegante ed efficiente senza ricorrere ai cursori:
http://groups.google.it/group/microsoft.public.it.sql/msg/8887e519f7eb28a1?hl=it
>grazie mille
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
cicemoi
Profilo
| Junior Member
72
messaggi | Data Invio:
mar 14 lug 2009 - 17:43
per ovviare quindi l'uso del cursore e ancora di più l'uso delle tabelle temporanee ho scelto la seguente semplice strada
set @strsql = 'select ' + @info + ' = ' + @info + ' + convert(varchar(400), Descrizione ) + '',''
from ' + @tabBusiness +
' where id_' + @campoIdTabella + '
in (' + @listInfo + ') '
exec sp_executesql @strsql
ritornando poi il parametro @info come output ma incorro nel seguente errore:
"Only functions and extended stored procedures can be executed from within a function"
sapreste darmi una dritta?
Grazie
Cinzia Cipriano
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 14 lug 2009 - 21:01
>per ovviare quindi l'uso del cursore e ancora di più l'uso delle
>tabelle temporanee ho scelto la seguente semplice strada
>
>set @strsql = 'select ' + @info + ' = ' + @info + ' + convert(varchar(400),
>Descrizione ) + '',''
> from ' + @tabBusiness +
> ' where id_' + @campoIdTabella + '
> in (' + @listInfo + ') '
>
>exec sp_executesql @strsql
>
>ritornando poi il parametro @info come output ma incorro nel
>seguente errore:
>"Only functions and extended stored procedures can be executed
>from within a function"
>sapreste darmi una dritta?
Si, che senso ha comporre in quel modo il comando di SELECT?
Perderesti tutti i vantaggi offerti dalle UDF col il rischio di subire attacchi di SQL Injection.
L'unica parte che puoi rendere parametrica è la clausola WHERE, specificando il valore dei parametri (non la lista delle colonne).
Inoltre ti ho già detto che nelle UDF NON puoi utilizzare il Dynamic SQL.
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
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 !