Kai*_*shu 5 sql-server sql-server-2012 functions user-defined-table-type table-valued-parameters
我正在改变function
:
ALTER FUNCTION [dbo].[fn_CalculateListing](@Listing TypeListingDatePrice READONLY)
RETURNS TypePreviousListingResult
AS
BEGIN
DECLARE @tbl_ListingDateDetails TypePreviousListingResult
RETURN @tbl_ListingDateDetails
END
GO
Run Code Online (Sandbox Code Playgroud)
但抛出错误为:
Msg 137, Level 16, State 1, Procedure fn_CalculateListing, Line 6
Must declare the scalar variable "@tbl_ListingDateDetails".
Run Code Online (Sandbox Code Playgroud)
即使我在使用该变量之前已经声明过,为什么会出现错误并要求声明?
TypePreviousListingResult 是创建为 的表类型CREATE TYPE TypePreviousListingResult AS TABLE...
。
Sol*_*zky 11
这里有两个问题:
对于多语句TVFs,你只需要RETURN;
代替RETURN @variable;
。
您似乎无法使用用户定义的表类型 (UDTT) 作为返回表类型。这将需要明确指定(即每个列名和数据类型)。
如果这是一个标量 UDF,那么在RETURNS
子句中仅指定数据类型名称并在语句中指定变量名称的语法RETURN
将是正确的。但是,您不能从标量 UDF返回TABLE
(或CURSOR
)类型。
有关更多详细信息,请参阅CREATE FUNCTION的 MSDN 页面。
您将需要以下内容:
ALTER FUNCTION [dbo].[fn_CalculateListing]
(
@Listing dbo.TypeListingDatePrice READONLY
)
RETURNS @ListingDateDetails TABLE (ColumnName DataType,...)
AS
BEGIN
-- Do stuffs
RETURN;
END;
GO
Run Code Online (Sandbox Code Playgroud)
有关传递行集的可用技术的更广泛讨论,请参阅:如何在存储过程之间共享数据by Erland Sommarskog。
归档时间: |
|
查看次数: |
8513 次 |
最近记录: |