【问题标题】:User define function with in stored procedure用户在存储过程中定义函数
【发布时间】:2010-03-24 05:00:27
【问题描述】:

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

【问题讨论】:

标签: sql sql-server-2005


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    动态 SQL 是唯一的方法。

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

    但是:

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

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

    【讨论】:

    • 我想创建自定义过程,就像拆分词一样,将参数输入提供给存储过程级别我只在这个过程中使用了这个自定义函数。在这个过程之后,我不希望这个函数出现在sql 服务器级别。让我们考虑一下用户是否要创建自定义流程,他/她创建了自定义功能。完成此过程后,他需要删除该函数。类似地,如果他们不删除该函数,则会创建 1000 个自定义函数,我们需要更多空间用于数据库级别。
    猜你喜欢
    • 2016-12-30
    • 2011-01-31
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多