स्क्रिप्ट में आपके पास अधिक विकल्प होते हैं और तर्कसंगत अपघटन पर एक बेहतर शॉट होता है। SQLCMD मोड में देखें (क्वेरी मेनू -> SQLCMD मोड), विशेष रूप से: setvar और: r कमांड।
एक संग्रहीत प्रक्रिया के भीतर आपके विकल्प बहुत सीमित हैं। आप सीधे कार्यविधि के साथ किसी फ़ंक्शन को परिभाषित नहीं कर सकते। सबसे अच्छा आप कुछ ऐसा कर सकते हैं, गतिशील एसक्यूएल के साथ:
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
यह एक वैश्विक अस्थायी फ़ंक्शन का अनुमान लगाता है, अगर ऐसा कुछ मौजूद था। यह अभी भी अन्य उपयोगकर्ताओं के लिए दृश्यमान है। आप नाम को अद्वितीय बनाने के लिए अपने कनेक्शन के @@ SPID को जोड़ सकते हैं, लेकिन इसके बाद डायनेमिक डेटा का भी उपयोग करने के लिए बाकी प्रक्रिया की आवश्यकता होगी।