繁体   English   中英

如何在T-SQL中编写一个函数,它接受一个表作为输入并将结果作为表返回?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM