2013-12-09 2 views
0

Я пытаюсь создать следующую функцию:Неправильный синтаксис пытается скомпилировать функцию

CREATE FUNCTION fn_WarrantyTrend 
returns @myTable table 
(
    Years int 
) 
AS 
BEGIN 
    insert into @myTable 
    SELECT distinct YEAR(CurDate) from EOD_Main ORDER BY YEAR(CurDate) ASC 
    RETURN 
END 

И я получаю эти ошибки:

Msg 102, Level 15, State 1, процедура fn_WarrantyTrend, Строка 2
Неверный синтаксис рядом с 'возвращает'.
Msg 1087, уровень 15, состояние 2, процедура fn_WarrantyTrend, строка 8
Должен объявить переменную таблицы «@myTable».

ответ

0

Когда вы получите ошибку от синтаксиса вы сделали, вы должны consult the documentation:

CREATE FUNCTION dbo.fn_WarrantyTrend -- always use schema prefix 
(
    @Years int -- need @variable syntax here 
) 
-- parameter list comes *before* RETURNS 
RETURNS TABLE -- you should use an inline table-valued function when possible 
AS 
    RETURN 
    (
    SELECT DISTINCT CurDate = YEAR(CurDate) -- should alias the output column 
     FROM dbo.EOD_Main -- again, always use SCHEMA prefix 
     --ORDER BY YEAR(CurDate) ASC -- not possible to ORDER BY here without TOP 
      -- the outer query that calls the function should apply any ORDER BY 
); 

Интересно, однако, что вы этого не сделаете @Years параметр, а не использовать его ...

Вы также должны рассмотреть возможность создания функции WITH SCHEMABINDING. И here is background on always using the schema prefix.

Смежные вопросы