sql-server-2008 – 使用命名参数调用内联TVF,正确的语法是什么?

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – 使用命名参数调用内联TVF,正确的语法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用位置参数调用内联TVF并且工作正常:
SELECT MyTable.Col1,(SELECT TvfColumn FROM ufnGetData(MyTable.Col1,MyTable.Col2)),MyTable.Col2
FROM MyTable

然后我尝试将参数命名为TVF并且它不解析:

SELECT MyTable.Col1,(SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1,@Param2=MyTable.Col2)),MyTable.Col2
FROM MyTable

函数看起来像:

CREATE FUNCTION dbo.ufnGetData
(   
    @Param1 INT,@Param2 INT
)
RETURNS TABLE 
AS
RETURN 
(
SELECT 
       blah blah blah AS TvfColumn
)
GO

给出类似于的错误

Msg 137,Level 15,State 2,Line 23 Must declare the scalar variable
“@Param2”.

Msg 102,State 1,Line 24 Incorrect Syntax near ‘,’.

我究竟做错了什么?

解决方法

表值用户定义函数不能被视为存储过程.调用它们时不使用命名参数,它是基于位置的.换句话说,你想做的事情是不可能的.

你有没有想要使用命名参数的原因?您需要定义所有参数,因此通常无法通过存储过程看到这些参数.

原文链接:https://www.f2er.com/mssql/83123.html

猜你在找的MsSQL相关文章