Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen einer benutzerdefinierten Funktion in einer gespeicherten Prozedur in SQL 2005

Technisch gesehen ... ja, das könnten Sie, aber das bedeutet nicht, dass Sie es tun sollten. Sie müssten vorsichtig sein, GO-Anweisungen zu vermeiden (verwenden Sie einfach Exec für jeden Batch), aber Sie könnten so etwas tun:

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

Allerdings würde ich dringend von dieser Art von Lösung abraten, insbesondere wenn die gewünschte Funktion etwas ist, das nützlich wäre, wie eine Split-Funktion. Ich würde empfehlen, einfach die UDF zu erstellen und zu verwenden und sie zu belassen, bis Sie sie möglicherweise erneut verwenden.