2017-06-05 63 views
1

如果我在'As'之後添加'Begin'它說不正確的語法。它工作得很好如果我試圖返回一個值。返回'表'的函數沒有開始...結束?

相反,我要補充「爲」開放的括號()

這是爲什麼後「迴歸」?

有了一個值作爲回報,我可以做到這一點罰款:

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 

它說:

Inco '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 
) 
+3

你需要證明失敗的SQL。 –

+0

@AlexK。添加。我做了這些例子,假設返回一個值或整個表的語法都是相同的。 –

回答

3

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; 
+0

第二個查詢中的返回將自動返回表而不需要提及'return @result'? –

+1

@Dablackninja合同是返回的數據是在退出函數時'@ result'中包含的任何內容。 'Return'只是執行退出。 – GSerg

0

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。顧名思義,您可以在定義中包含多個語句。但請注意,您必須必須指定返回表的模式作爲函數定義的一部分。

0

你可以聲明收益表中的字段下面的代碼:

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 
相關問題