技術的には...可能ですが、そうすべきというわけではありません。 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
そうは言っても、特に必要な関数が Split 関数のように役立つものである場合は、この種のソリューションを強くお勧めしません。 UDF を作成して使用し、再度使用するまでそのままにしておくことをお勧めします。