तकनीकी रूप से... हाँ आप कर सकते थे लेकिन इसका मतलब यह नहीं है कि आपको करना चाहिए। आपको GO स्टेटमेंट से बचने के बारे में सावधान रहना होगा (बस प्रत्येक बैच के लिए Exec का उपयोग करें) लेकिन आप कुछ ऐसा कर सकते हैं:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE dbo.Test
AS
Declare @Sql nvarchar(max)
Set @Sql = 'CREATE FUNCTION dbo.Foo
(
)
RETURNS TABLE
AS
RETURN
(
SELECT 0 As Bar
)'
Exec(@Sql)
Select *
From dbo.Foo()
Set @Sql = 'Drop Function dbo.Foo'
Exec(@Sql)
Return
GO
Exec dbo.Test
उस ने कहा, मैं इस तरह के समाधान के खिलाफ दृढ़ता से अनुशंसा करता हूं, खासकर यदि आप जो फ़ंक्शन चाहते हैं वह कुछ ऐसा है जो स्प्लिट फ़ंक्शन की तरह उपयोगी होगा। मैं केवल यूडीएफ बनाने और इसका उपयोग करने और इसे तब तक छोड़ने की सलाह दूंगा जब तक आप इसे फिर से उपयोग नहीं कर सकते।