内联标量函数:真实还是蒸发器?

Ant*_*ull 16 sql t-sql sql-server user-defined-functions

在SQL Server中创建内联标量函数的正确语法是什么?

在线书籍,在函数类型章节(2005及以上)中,讨论了内联标量函数,就好像它们存在一样,并且好像不需要BEGIN...END块(与多行函数相比):

对于内联标量函数,没有函数体; 标量值是单个语句的结果.对于多语句标量函数,在BEGIN ... END块中定义的函数体包含一系列返回单个值的Transact-SQL语句.

我还注意到spt_values表中对象类型列表中的"IS:inline scalar function"行:

SELECT name
FROM master..spt_values
WHERE type = 'O9T'
AND name LIKE '%function%'
Run Code Online (Sandbox Code Playgroud)

我试图创建这样一个功能但没有成功:

CREATE FUNCTION AddOne(@n int) RETURNS int
AS
    RETURN @n + 1
Run Code Online (Sandbox Code Playgroud)

错误消息是

Msg 102,Level 15,State 31,Procedure AddOne,Line 3'RETURN'附近的语法不正确.

我错过了什么或者联机丛书中是否有错误?

RBa*_*ung 9

好吧,AFAIK,都不存在(甚至在隐藏的[ mssqlsystemresource ]数据库中也没有)并且没有创建一个语法的语法.所以看起来这是微软必须在SQL Server 2005的预备版中通过为它添加一个类型(以及doc!)而预期的,但是由于某种原因从未真正实现过.

虽然它是所有Ms Sql Server最需要的功能之一.主要是因为默认的UDF是如此之慢,我们最终不得不后端ITVF来获得相同的效果.(困难和笨拙,但它的工作原理).

  • 看起来他们几乎在这里http://www.vldb.org/pvldb/vol11/p432-ramachandra.pdf (3认同)
  • @MartinSmith 哇!所以他们决定修复 *all* 标量函数而不是仅仅实现内联标量函数?我不得不承认,这听起来很棒,但似乎他们仍然可以给我们内联作为一种廉价且简单的临时选择。 (2认同)