具有退货功能的表'表'没有开始......结束?

时间:2017-06-05 13:02:26

标签: sql sql-server tsql

如果我添加'开始'之后' As'它说错误的语法。它工作正常如果我试图返回一个值。

相反,我应该添加' return'之后' as'并打开括号()

为什么?

有一个值作为回报,我可以做得很好:

 CREATE FUNCTION MATHEE(@A int,@B int)
 returns int
 as 
 begin
    DECLARE @C int

    SET @C = @A + @B

 return @C 
 end

以表格作为回报,我不能

   CREATE FUNCTION TOP_USERSs(@number int,@bob varchar(20))
RETURNS TABLE 
AS
BEGIN

RETURN SELECT agent from Agents where agent = @bob and prime > @number
END

它说:

  

BEGIN'附近的语法不正确。

使用括号并且没有begin..end可以正常工作:

CREATE FUNCTION TOP_USERSs(@number int,@bob varchar(20))
RETURNS TABLE 
AS
RETURN
(
 SELECT agent from Agents where agent = @bob and prime > @number
)

4 个答案:

答案 0 :(得分:6)

内联用户定义函数中的

RETURNS TABLE&这些没有功能体

  

There is no function_body delimited by BEGIN and END.

例如,如果您在set @number += 1之前添加了RETURN,那么它也将无法解析。

答案 1 :(得分:4)

RETURNS TABLE创建一个内联表值函数。它应该在select中包含一个return作为其正文:

CREATE FUNCTION TOP_USERSs(@number int,@bob varchar(20))
returns table
as return (
    select ...
);

如果你想要开始结束语法,那就是一个多语句表值函数,然后你需要声明它返回的表:

CREATE FUNCTION TOP_USERSs(@number int,@bob varchar(20))
returns @result table (agent varchar(10) not null)
as
begin
    insert into @result (agent) ... ;
    ...
    return;
end;

答案 2 :(得分:0)

Per the documentation,有两种表值函数,具有不同的语法:

-- Transact-SQL Inline Table-Valued Function Syntax   
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type   
    [ = default ] [ READONLY ] }   
    [ ,...n ]  
  ]  
)  
RETURNS TABLE  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    RETURN [ ( ] select_stmt [ ) ]  
[ ; ]  

这是一个内嵌 TVF。如语法所示,它可以仅包含RETURN后跟SELECT。没什么,没什么。

-- Transact-SQL Multi-Statement Table-Valued Function Syntax  
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type   
    [ = default ] [READONLY] }   
    [ ,...n ]  
  ]  
)  
RETURNS @return_variable TABLE <table_type_definition>  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN  
    END  
[ ; ]

这是一个多语句 TVF。顾名思义,您可以在定义中包含多个语句。但请注意,必须指定返回表的架构作为函数定义的一部分。

答案 3 :(得分:0)

您可以将Return表的字段声明为以下代码:

CREATE FUNCTION TOP_USERSs(@number int,@bob varchar(20))
RETURNS @Result TABLE ( Agent varchar(20) )
AS
BEGIN
    Insert into @Result 
    SELECT agent from Agents where agent = @bob and prime > @number

    RETURN 
END