Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Tworzenie funkcji zdefiniowanej przez użytkownika w procedurze składowanej w SQL 2005

Technicznie... tak, możesz, ale to nie znaczy, że powinieneś. Musisz uważać na unikanie instrukcji GO (wystarczy użyć Exec dla każdej partii), ale możesz zrobić coś takiego:

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

To powiedziawszy, zdecydowanie odradzałbym tego rodzaju rozwiązanie, zwłaszcza jeśli żądana funkcja jest czymś, co byłoby przydatne, jak funkcja Split. Sugerowałbym po prostu utworzenie UDF i używanie go i pozostawienie go do czasu, gdy będziesz mógł go ponownie użyć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zredukować wiele podobnych skorelowanych podzapytań?

  2. DATEDIFF() zwraca nieprawidłowe wyniki w programie SQL Server? Przeczytaj to.

  3. Ustaw opcję 9 w procedurze składowanej SQL Server przy użyciu WinHttp.WinHttpRequest.5.1 dla TLS 1.2

  4. Instrukcja SQL do wyboru z 2 różnych tabel, z dwóch różnych baz danych (ten sam serwer)

  5. Jawną wartość kolumny tożsamości w tabeli można określić tylko wtedy, gdy jest używana lista kolumn, a IDENTITY_INSERT jest WŁĄCZONY SQL Server