将多语句表值函数转换为内联表值函数时是否存在任何问题?

时间:2011-08-01 15:05:27

标签: sql-server

我们有很多多语句TVF,我们有时希望将这些转换成内联TVF(通常是出于性能原因)。

我们不能做一个简单的ALTER FUNCTION来进行这个切换,因为SQL Server告诉我们“无法对'db.FOO'执行alter,因为它是一个不兼容的对象类型。”所以我们必须首先删除该函数,然后重新创建它。

这对我们来说效果很好,但我们不确定为什么 SQL Server不会自动执行drop / create。是否有一些特殊的问题,它试图保护我们免于盲目地走进去?

某些Google搜索显示人们收到错误消息并被告知只是删除它并重新创建它,但我一开始就无法弄清楚错误消息的原因。

对内部人员的任何见解都将不胜感激。

1 个答案:

答案 0 :(得分:3)

它们是sys.objects中的两种不同类型的对象,因此不兼容。

实际上,它与

相同
CREATE TABLE dbo.foo (...)

然后

ALTER VIEW dbo.foo ...

视图和表格可以使用相同的方式,但它们不相同。同样适用于TVF。

对于3种类型,应该有不同风格的CREATE FUNCTION ......