Technisch gezien... ja dat zou kunnen, maar dat betekent niet dat je het zou moeten doen. Je zou voorzichtig moeten zijn met het vermijden van GO-statements (gebruik gewoon Exec voor elke batch), maar je zou iets kunnen doen als:
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
Dat gezegd hebbende, zou ik dit soort oplossingen ten zeerste afraden, vooral als de gewenste functie iets is dat nuttig zou zijn, zoals een Split-functie. Ik zou aanraden om gewoon de UDF te maken en deze te gebruiken en te laten staan totdat u deze opnieuw kunt gebruiken.