Techniquement... oui vous pourriez mais cela ne veut pas dire que vous devriez. Vous devrez faire attention à éviter les instructions GO (utilisez simplement Exec pour chaque lot), mais vous pouvez faire quelque chose comme :
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
Cela dit, je déconseille fortement ce type de solution, surtout si la fonction que vous voulez est quelque chose qui serait utile comme une fonction Split. Je recommanderais simplement de créer l'UDF et de l'utiliser et de le laisser jusqu'à ce que vous puissiez l'utiliser à nouveau.