sql >> Database >  >> RDS >> Sqlserver

Een door de gebruiker gedefinieerde functie maken in Opgeslagen procedure in SQL 2005

Technisch gezien... ja dat zou kunnen, maar dat betekent niet dat je het zou moeten doen. Je zou voorzichtig moeten zijn met het vermijden van GO-statements (gebruik gewoon Exec voor elke batch), maar je zou iets kunnen doen als:

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

Dat gezegd hebbende, zou ik dit soort oplossingen ten zeerste afraden, vooral als de gewenste functie iets is dat nuttig zou zijn, zoals een Split-functie. Ik zou aanraden om gewoon de UDF te maken en deze te gebruiken en te laten staan ​​totdat u deze opnieuw kunt gebruiken.



  1. Snelste manier om enorme MySQL-tabel te verwijderen

  2. Recursieve query met dezelfde tabel in SQL Server 2008

  3. array_push() vs. $array[] =.... Wat is het snelst?

  4. Een update-SQL optimaliseren die draait op een Oracle-tabel met 700 miljoen rijen