Sql 在存储过程中使用用户定义函数
我们是否可以在存储过程中创建用户定义函数,然后在存储过程结束时,我们需要删除该自定义用户定义函数。您可以,但它可能会变得混乱 看。这将允许您运行任意SQL,包括DDL。以这种方式创建和使用UDF看起来确实有点危险——您需要确保与竞争线程之间没有任何名称冲突,并且无法获得任何类型的查询优化Sql 在存储过程中使用用户定义函数,sql,sql-server-2005,Sql,Sql Server 2005,我们是否可以在存储过程中创建用户定义函数,然后在存储过程结束时,我们需要删除该自定义用户定义函数。您可以,但它可能会变得混乱 看。这将允许您运行任意SQL,包括DDL。以这种方式创建和使用UDF看起来确实有点危险——您需要确保与竞争线程之间没有任何名称冲突,并且无法获得任何类型的查询优化 我会仔细检查你的设计,以确保没有其他解决方案 动态SQL是唯一的方法 ALTER PROC ... AS ... EXEC ('CREATE FUNCTION tempFunc...') ... EXEC ('
我会仔细检查你的设计,以确保没有其他解决方案 动态SQL是唯一的方法
ALTER PROC ...
AS
...
EXEC ('CREATE FUNCTION tempFunc...')
...
EXEC ('DROP FUNCTION tempFunc')
...
GO
然而:
- 如果有2个并发执行,它将失败,因为tempFunc已经存在
- 如果每个udf定义不同,则需要随机名称
- 如果将名称随机化,其余代码也必须是动态SQL
- 存储过程意味着重用,所以只需将其持久化即可
- 您的代码将需要ddl_admin或db_owner权限来创建udf
所以。。。为什么要这样做?我想创建自定义进程,就像为存储过程级别提供参数输入的拆分字一样。我仅将此自定义函数用于此进程。在此进程之后,我不希望此函数出现在sql server级别。让我们考虑一下,如果用户想要创建自定义进程,他/她创建了自定义函数。完成此过程后,他需要删除该函数。如果他们不删除该函数,我们需要更多的数据库空间。这看起来像是以下函数的副本: