sql >> Base de Datos >  >> RDS >> Sqlserver

Creación de una función definida por el usuario en un procedimiento almacenado en SQL 2005

Técnicamente... sí, podrías, pero eso no significa que debas hacerlo. Tendría que tener cuidado de evitar declaraciones GO (simplemente use Exec para cada lote), pero podría hacer 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

Dicho esto, recomendaría enfáticamente este tipo de solución, especialmente si la función que desea es algo que sería útil como una función de división. Recomendaría simplemente crear el UDF y usarlo y dejarlo hasta que pueda usarlo nuevamente.