用户在存储过程中定义函数

时间:2010-03-24 05:00:28

标签: sql sql-server-2005

我们可以在存储过程中创建用户定义函数,然后结束我们需要删除该自定义用户定义函数的存储过程。

2 个答案:

答案 0 :(得分:1)

你可以,但它可能会变得混乱。

看看sp_executesql。这将允许您运行任意SQL,包括DDL。以这种方式创建和使用UDF似乎有点危险 - 您需要确保与竞争线程没有任何名称冲突,并且无法获得任何类型的查询优化。

我会仔细检查你的设计,以确保没有其他解决方案!

答案 1 :(得分:0)

动态SQL是唯一的方法。

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

然而:

  • 如果你有2个并发执行,它将失败,因为tempFunc已经存在
  • 如果每个udf定义不同,则需要随机名称
  • 如果您将名称随机化,则其余代码也必须是动态SQL
  • 存储过程意味着重用,所以只需坚持下去
  • 您的代码需要ddl_admin或db_owner权限才能创建udf
  • ...

那么......你为什么要这样做?