如果我添加'开始'之后' 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
)
答案 0 :(得分:6)
RETURNS TABLE
&这些没有功能体
例如,如果您在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