Secara teknis ... ya Anda bisa tetapi itu tidak berarti Anda harus melakukannya. Anda harus berhati-hati untuk menghindari pernyataan GO (cukup gunakan Exec untuk setiap batch) tetapi Anda dapat melakukan sesuatu seperti:
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
Yang mengatakan, saya akan sangat menyarankan terhadap solusi semacam ini, terutama jika fungsi yang Anda inginkan adalah sesuatu yang akan berguna seperti fungsi Split. Saya akan merekomendasikan hanya membuat UDF dan menggunakannya dan membiarkannya sampai Anda dapat menggunakannya lagi.