Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criando uma função definida pelo usuário no procedimento armazenado no SQL 2005


Tecnicamente... sim, você poderia, mas isso não significa que você deveria. Você teria que ter cuidado para evitar instruções GO (basta usar Exec para cada lote), mas você poderia fazer algo como:
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

Dito isto, eu recomendo fortemente contra esse tipo de solução, especialmente se a função que você deseja é algo que seria útil como uma função Split. Eu recomendaria apenas criar o UDF e usá-lo e deixá-lo até que você possa usá-lo novamente.