【问题标题】:How to refresh the definition of a T-SQL user-defined function after a dependent object is redefined?重定义依赖对象后如何刷新T-SQL用户自定义函数的定义?
【发布时间】:2009-11-15 19:34:11
【问题描述】:

考虑以下事件序列:

  1. 定义了一个视图 v_Foo
  2. 定义了一个用户定义的函数 GetFoo(),其中包括来自 v_Foo 的所有列(使用 'Select * ...')
  3. v_Foo 的定义发生变化,现在包含更多列
  4. 我现在希望 GetFoo() 将新列包含在 v_Foo 中,但它仍然引用旧定义

我可以重新运行最初创建 GetFoo 的脚本,一切都会好起来的;但这是有问题的,因为我不会讨论。有没有其他方法可以刷新用户定义函数的定义,使其与其依赖对象同步?

【问题讨论】:

标签: sql sql-server tsql user-defined-functions


【解决方案1】:

简短的回答是

您必须在表格 UDF 中重新定义 RETURN TABLE 语句,GetFoo()
每当v_Foo 的定义发生变化时。

但有办法绕过它(翻译为不实用)。

  1. ALTER_VIEW 事件上创建DDL 触发器。
  2. 然后使用动态 SQL 创建GetFoo()

【讨论】:

    【解决方案2】:

    很高兴看到函数的定义。您所说的只是使用 SELECT *。能具体点吗?

    您还忘了告诉我们您使用的是什么版本的 SQL Server。如果 >= 2005,你看过sp_refreshsqlmodule吗?

    很好奇您坚持使用 SELECT * 的原因是什么。这里有很多讨论,但缺点仍然大大超过优点,恕我直言:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      相关资源
      最近更新 更多