Technisch gesehen ... ja, das könnten Sie, aber das bedeutet nicht, dass Sie es tun sollten. Sie müssten vorsichtig sein, GO-Anweisungen zu vermeiden (verwenden Sie einfach Exec für jeden Batch), aber Sie könnten so etwas tun:
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
Allerdings würde ich dringend von dieser Art von Lösung abraten, insbesondere wenn die gewünschte Funktion etwas ist, das nützlich wäre, wie eine Split-Funktion. Ich würde empfehlen, einfach die UDF zu erstellen und zu verwenden und sie zu belassen, bis Sie sie möglicherweise erneut verwenden.