【问题标题】:Changes to a table-valued function called by a stored procedure are not recognized?无法识别由存储过程调用的表值函数的更改?
【发布时间】:2011-02-12 17:51:02
【问题描述】:

我有一个调用表值函数 tvf 的存储过程 sp。有时我修改了 tvf,但随后执行 sp 时,sp 的输出与修改前相同。似乎它被缓存或编译或其他东西。如果我对 sp 进行一些虚拟更改,那么我会得到 sp 的正确输出。

有什么办法可以克服这个问题吗?在 Oracle 中可以重新编译所有存储过程,但我一直无法弄清楚如何在 SQL Server 中执行此操作?

非常感谢任何帮助。

【问题讨论】:

  • 改变一个对象(例如一个 TVF)应该从缓存中刷新它的使用。
  • 你能发布 UDF 和调用 TSQL...
  • 不幸的是,它太大了,放不下:(

标签: sql-server sql-server-2005 tsql optimization


【解决方案1】:

您可以使用sp_recompile 重新编译存储过程,但是您所描述的不应该发生。

你能发一下udf吗?我能想到的唯一情况是udf 总是返回相同的结果,而不管输入参数如何。

【讨论】:

  • 感谢您非常及时的回复! udf 比较复杂,所以我不指望你有精力去实际看它,但无论如何它在这里......哦,它大约 5000 个字符太长了,不适合这里:) 我会看看我是否可以复制这种行为有一些更简单的例子。但我不是在编造这个——我已经观察过好几次了......我是否必须对每个存储过程使用 sp_recompile,或者我可以以某种方式让它重新编译我所有的存储过程?
  • 我会使用 SELECT 'sp_recompile' + name FROM sys.procedures 的输出来重新编译所有存储过程。
猜你喜欢
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多