sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en användardefinierad funktion i lagrad procedur i SQL 2005

Tekniskt sett...ja det kan du men det betyder inte att du borde. Du måste vara försiktig med att undvika GO-satser (använd bara Exec för varje batch) men du kan göra något som:

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

Som sagt, jag skulle starkt rekommendera denna typ av lösning, speciellt om funktionen du vill ha är något som skulle vara användbart som en Split-funktion. Jag skulle rekommendera att bara skapa UDF och använda den och lämna den tills du kanske använder den igen.



  1. Vad är det enklaste sättet att importera en ny tabell till MySQL v5 från CSV?

  2. CURRENT_TIMESTAMP() Funktion i Oracle

  3. Kan du ringa en webbtjänst från TSQL-kod?

  4. Hur bygger man trådade kommentarer med 1 eller 2 frågor?