Negli script hai più opzioni e una migliore possibilità di scomposizione razionale. Esaminare la modalità SQLCMD (Menu query -> Modalità SQLCMD), in particolare i comandi: setvar e: r.
All'interno di una stored procedure le opzioni sono molto limitate. Non è possibile creare definire una funzione direttamente con il corpo di una procedura. Il meglio che puoi fare è qualcosa di simile, con SQL dinamico:
create proc DoStuff
as begin
declare @sql nvarchar(max)
/*
define function here, within a string
note the underscore prefix, a good convention for user-defined temporary objects
*/
set @sql = '
create function dbo._object_name_twopart (@object_id int)
returns nvarchar(517) as
begin
return
quotename(object_schema_name(@object_id))+N''.''+
quotename(object_name(@object_id))
end
'
/*
create the function by executing the string, with a conditional object drop upfront
*/
if object_id('dbo._object_name_twopart') is not null drop function _object_name_twopart
exec (@sql)
/*
use the function in a query
*/
select object_id, dbo._object_name_twopart(object_id)
from sys.objects
where type = 'U'
/*
clean up
*/
drop function _object_name_twopart
end
go
Questa approssima una funzione temporanea globale, se una cosa del genere esistesse. È ancora visibile agli altri utenti. È possibile aggiungere lo SPID @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fonte
2009-06-12 05:29:41
probabilmente c'è un modo migliore per fare ciò che vuoi senza una funzione. forse dovresti pubblicare uno snippet del codice che vuoi trasformare in una funzione? – DForck42
stai generando una funzione in modo dinamico, quindi è diversa ogni volta? se la tua funzione è sempre la stessa basta lasciarla nel database –
stavo cercando di farlo come un modo per rendere la query più leggibile. L'idea di creare query enormi è difficile da mantenere. –