2010-03-24 2 views
0

мы можем создать функцию определения пользователя в хранимой процедуре, а затем в конце процедуры хранения нам нужно удалить эту пользовательскую функцию определения пользователя.Пользователь определяет функцию с помощью хранимой процедуры

+0

Это похоже на дубликат: [Создание функции, определяемой пользователем в хранимой процедуре в SQL 2005] (http://stackoverflow.com/questions/2505408/creating-a-user-defined-function-in-stored-function-in-stored- procedure-in-sql-2005/2505459 # 2505459) – Thomas

ответ

1

Вы можете, но это может стать беспорядочным.

Посмотрите на sp_executesql. Это позволит вам запускать произвольный SQL, включая DDL. Создание и использование UDF таким образом кажется немного опасным - вам нужно убедиться, что конфликты имен не конфликтуют с конкурирующими потоками, и нет никакого способа получить оптимизацию запросов.

Я бы дважды проверял ваш дизайн, чтобы убедиться, что нет другого решения!

0

Динамический SQL - единственный способ.

ALTER PROC ... 
AS 
... 
EXEC ('CREATE FUNCTION tempFunc...') 
... 
EXEC ('DROP FUNCTION tempFunc') 
... 
GO 

Однако:

  • , если у вас есть 2 одновременных казни он потерпит неудачу, потому что tempFunc уже существует
  • если каждое UDF определение отличается, то вам нужно случайные имена
  • если вы рандомизации имя, остальная часть кода должна быть динамической SQL тоже
  • сохраненный proc подразумевает повторное использование, поэтому просто сохраняйте его
  • код потребуется ddl_admin или db_owner права на создание ОДС
  • ...

Итак ... почему вы хотите это сделать?

+0

Я хочу создать пользовательский процесс как раз как раздельные слова для ввода параметров на уровень хранимой процедуры, я использовал эту настраиваемую функцию только для этого процесса. После этого процесса я не хочу эта функция присутствует на уровне сервера sql. Давайте рассмотрим, хотите ли пользователь создать пользовательский процесс, который он создал пользовательскую функцию. после завершения этого процесса ему необходимо удалить это. Аналогично создается 1000 настраиваемых функций, если они не удаляют эту функцию, нам нужно больше места для уровня базы данных. – Rajagopalk

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