Về mặt kỹ thuật ... có bạn có thể nhưng điều đó không có nghĩa là bạn nên làm. Bạn sẽ phải cẩn thận về việc tránh các câu lệnh GO (chỉ sử dụng Exec cho mỗi lô) nhưng bạn có thể làm điều gì đó như:
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
Điều đó nói rằng, tôi thực sự khuyên bạn không nên sử dụng loại giải pháp này, đặc biệt nếu hàm bạn muốn là thứ hữu ích như hàm Split. Tôi khuyên bạn chỉ cần tạo UDF và sử dụng nó và để nó cho đến khi bạn có thể sử dụng lại.