[英]How to write a function in T-SQL, which accepts a table as input and returns result back as a table?
这是我用来创建一个函数的代码,它接受table
作为输入,在函数内操作后返回table
格式的结果:
CREATE FUNCTION fn_CalculateListing(@Listing ListingColumn READONLY) --(ROWID INT,value1 INT, value2 INT))
RETURNS TABLE
AS
BEGIN
DECLARE @result TABLE (ID INT, Name VARCHAR(50))
INSERT INTO @result(ID,Name)
SELECT ROWID, Name
FROM @Listing
RETURN @Listing
END
我尝试使用table-inline parameter
但收到以下错误:
消息137,级别15,状态2,过程fn_CalculateListing,第16行
必须声明标量变量“@Listring”。Msg 102,Level 15,State 31,Procedure fn_CalculateListing,29行
'BEGIN'附近的语法不正确
我怎样才能使它正确?
也许指定dbo
架构很重要。 我也在定义@result
表,与你的代码有所不同。
我检查过以下脚本是否有效:
创建表类型
CREATE TYPE [dbo].[ListingColumn] AS TABLE(
[ROWID] [int] NULL,
[value1] [int] NULL,
[value2] [int] NULL
)
GO
创建表值函数
CREATE FUNCTION [dbo].[fn_CalculateListing](@Listing dbo.ListingColumn READONLY)
RETURNS @result TABLE
(
ID INT,
Name VARCHAR(50)
)
AS
BEGIN
INSERT INTO @result(ID, Name)
SELECT ROWID, value1
FROM @Listing;
RETURN;
END
GO
如果您的函数可以表示为单个SELECT
,则将其编写为单语句内联用户定义函数要好得多。 语法如下所示:
CREATE FUNCTION [dbo].[InlineCalculateListing](@Listing dbo.ListingColumn READONLY)
RETURNS TABLE
AS
RETURN
(
SELECT ROWID, value1
FROM @Listing AS L
);
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.