Технически... да, бихте могли, но това не означава, че трябва. Трябва да внимавате да избягвате 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 и да го използвате и да го оставите, докато не го използвате отново.