加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:20:21 所属栏目:MsSql教程 来源:网络整理
导读:我尝试使用位置参数调用内联TVF并且工作正常: SELECT MyTable.Col1,(SELECT TvfColumn FROM ufnGetData(MyTable.Col1,MyTable.Col2)),MyTable.Col2FROM MyTable 然后我尝试将参数命名为TVF并且它不解析: SELECT MyTable.Col1,(SELECT TvfColumn FROM ufnGet
我尝试使用位置参数调用内联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 ‘,’.

我究竟做错了什么?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读