1

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

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

спасибо.

С уважением NLV

ответ

1

Технически ... да вы могли бы, но это не значит, что вы должны. Вы должны быть осторожными, избегая заявлений 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

Okie! Я думал об этом так же, как временная таблица. Если мы создадим временную таблицу в нашем USP, мы, наконец, удалим ее перед выходом, не так ли? Просто предположил, что нам нужно также сбросить UDF :) – NLV

+0

Вы не можете создавать временные UDF в SQL Server (хотя вы можете создавать временные процедуры). Для UDF, который делает Splits, я бы рекомендовал просто сделать его постоянным, поскольку вы, скорее всего, снова его используете. – Thomas

0

CTEs тоже будет хорошо, в зависимости от того, что пытается сделать UDF.

Смежные вопросы