Создание пользовательской функции в хранимой процедуре в SQL 2005 - PullRequest
1 голос
/ 24 марта 2010

У меня есть хранимая процедура, в которой я хочу создать пользовательскую функцию - Split (разбивает строку, разделенную разделителями и возвращает строки в таблице), использует функцию и, наконец, удаляет функцию.

Мой вопрос заключается в том, могу ли я создать пользовательскую функцию внутри хранимой процедуры и, наконец, удалить ее?

Спасибо.

С уважением NLV

Ответы [ 2 ]

1 голос
/ 24 марта 2010

Технически ... да, вы могли бы, но это не значит, что вы должны. Вы должны быть осторожны, избегая операторов GO (просто используйте Exec для каждого пакета), но вы можете сделать что-то вроде:

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

Тем не менее, я настоятельно рекомендую против такого решения, особенно если функция, которую вы хотите, является чем-то полезным, как функция Split. Я бы порекомендовал просто создать UDF и использовать его и оставлять до тех пор, пока вы не сможете использовать его снова.

0 голосов
/ 24 марта 2010

CTE здесь тоже подойдет, в зависимости от того, что пытается сделать ваш UDF.

...