Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Ошибка Синтаксиса


Автор: kBepTu 27.12.2007, 01:57
Код

CREATE  FUNCTION C0untNmbrs (@KODRYBR CHAR(8), @SIGN smallint) RETURNS TABLE 
AS
    BEGIN
    IF (@SIGN>0)
        RETURN SELECT COUNT(*) FROM KATALOG WHERE KATALOG.Rybrika=@KODRYBR AND KATALOG.YER>1980
    RETURN SELECT COUNT(*) FROM KATALOG WHERE KATALOG.Rybrika=@KODRYBR AND KATALOG.YER<1980
    END

CREATE VIEW NMRybr
AS
SELECT    RYBRICAT.RNAME,
    C0untNmbrs(RYBRICAT.RSHIFR, 1) AS MORE1980
    C0untNmbrs(RYBRICAT.RSHIFR, -1) AS LESS1980
    FROM Rybr, RYBRICAT WHERE RYBRICAT.RSHIFR=Rybr.Rybrika 
SELECT * FROM NMRybr

на функцию выдает ошибку
Код

Incorrect syntax near 'BEGIN'.

На представление
Код

'C0untNmbrs' is not a recognized built-in function name

Подскажите пожалуйста

Автор: Servena 27.12.2007, 11:39
Смотри, у тебя синтаксис неправильный.

Если ты хочешь использовать inline table-valued - у нее нет тела и только одна выборка.
Код

CREATE  FUNCTION C0untNmbrs (@KODRYBR CHAR(8), @SIGN smallint) RETURNS TABLE 
AS
RETURN
(
    SELECT COUNT(*) FROM KATALOG WHERE KATALOG.Rybrika=@KODRYBR AND KATALOG.YER>1980
);

Обрати внимания на круглые скобки.


Но тебе скорее всего нужна multistatement table-valued функция
Код

CREATE  FUNCTION C0untNmbrs (@KODRYBR CHAR(8), @SIGN smallint) 
    RETURNS @xxxxx TABLE
    (
    r INT ,
    e VARCHAR(37)
    ) 
AS
    BEGIN
    IF (@SIGN>0)
        RETURN SELECT COUNT(*) FROM KATALOG WHERE KATALOG.Rybrika=@KODRYBR AND KATALOG.YER>1980
    RETURN SELECT COUNT(*) FROM KATALOG WHERE KATALOG.Rybrika=@KODRYBR AND KATALOG.YER<1980
    END

Обрати внимание на это:
Код

RETURNS @xxxxx TABLE
    (
    r INT ,
    e VARCHAR(37)
    ) 

Здесь ты объявляешь таблицу и ее структуру(у меня она от фонаря - а ты сделай ту, которая подойдет для твоего SELECT)

Автор: kBepTu 27.12.2007, 16:52
Код

Но тебе скорее всего нужна multistatement table-valued функция

Угу 

Ответ исчерыпающий  smile  Спасибо!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)