Teknisk...ja det kunne du, men det betyder ikke, at du skal. Du skal være forsigtig med at undgå GO-sætninger (brug blot Exec for hver batch), men du kan gøre noget som:
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
Når det er sagt, vil jeg stærkt anbefale denne form for løsning, især hvis den funktion, du ønsker, er noget, der ville være nyttig som en Split-funktion. Jeg vil anbefale bare at oprette UDF'en og bruge den og lade den ligge, indtil du måske bruger den igen.