我们有很多多语句TVF,我们有时希望将这些转换成内联TVF(通常是出于性能原因)。
我们不能做一个简单的ALTER FUNCTION来进行这个切换,因为SQL Server告诉我们“无法对'db.FOO'执行alter,因为它是一个不兼容的对象类型。”所以我们必须首先删除该函数,然后重新创建它。
这对我们来说效果很好,但我们不确定为什么 SQL Server不会自动执行drop / create。是否有一些特殊的问题,它试图保护我们免于盲目地走进去?
某些Google搜索显示人们收到错误消息并被告知只是删除它并重新创建它,但我一开始就无法弄清楚错误消息的原因。
对内部人员的任何见解都将不胜感激。
答案 0 :(得分:3)
它们是sys.objects中的两种不同类型的对象,因此不兼容。
实际上,它与
相同CREATE TABLE dbo.foo (...)
然后
ALTER VIEW dbo.foo ...
视图和表格可以使用相同的方式,但它们不相同。同样适用于TVF。
对于3种类型,应该有不同风格的CREATE FUNCTION ......