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


Автор: Lunatikus 9.10.2007, 11:12
Код

DECLARE @i int, @ostatok float, @univer varchar(30), @data datetime;
SET              @data = CONVERT(datetime, getdate(), 104);
SET              @i = 1; 
WHILE NOT @i =
                          (SELECT     COUNT(d .univer)
                            FROM          (SELECT DISTINCT (univer)
                                                    FROM          deal) d) 
BEGIN
SET              @ostatok =
                          (SELECT     t1.ost_next
                            FROM          ((SELECT     TOP 1 *
                                                      FROM         (SELECT     TOP @i univer, ost - p AS ost_next
                                                                             FROM          deal
                                                                             WHERE      data = @data
                                                                             ORDER BY univer ASC) t
                                                      ORDER BY t .univer DESC) t1);
SET              @univer =
                                                 (SELECT     TOP 1 t .univer
                                                   FROM          (SELECT     TOP @i univer
                                                                           FROM          deal
                                                                           WHERE      data = @data
                                                                           ORDER BY univer ASC) t
                                                   ORDER BY t .univer DESC);
UPDATE    deal    SET              ost = @ostatok     WHERE     uni = @univer AND data = @data + 1;
SET   @i = @i + 1; 
END;

Ругается на синтаксическую ошибку in line1:syntax error near '@i'
В упор не вижу.В чем моя ошибка,подскажите,пожалуйста.

Автор: Servena 9.10.2007, 11:26
Попробуй заменить i например на ii

Автор: Lunatikus 9.10.2007, 11:42
тоже самое,попробовал менять в тексте запроса и нашел,что ругается на TOP @i. Неужели можно только конкретно указывать число?И никак через переменную??=(((

Автор: Lunatikus 9.10.2007, 12:25
грррррррррр,даже если поставить вместе @i конкретно ,например, 1, выдает еще одну ошибку синтаксиса рядом с ')' оно издевается =(((

Автор: Servena 9.10.2007, 12:36
Так, с @i будет правильно так - TOP(@i), а со второй ошибкой нужно еще по разбираться.

Автор: Lunatikus 9.10.2007, 12:38
вторую ошибку нашел и все остальные тоже)
Код

DECLARE @i int, @ostatok float, @univer varchar(30), @data datetime;
SET              @data = CONVERT(datetime, getdate(), 104);
SET              @i = 1; 
WHILE NOT @i =
                          (SELECT     COUNT(d .univer)
                            FROM          (SELECT DISTINCT (univer)
                                                    FROM          deal) d) 
BEGIN
SET              @ostatok =
                          (SELECT     t1.ost_next
                            FROM        (SELECT     TOP 1 *   //одна скобка а не две
                                                      FROM         (SELECT     TOP @i univer, ost - p AS ost_next
                                                                             FROM          deal
                                                                             WHERE      data = @data
                                                                             ORDER BY univer ASC) t
                                                      ORDER BY t .univer DESC) t1);
SET              @univer =
                                                 (SELECT     TOP 1 t2 .univer
                                                   FROM          (SELECT     TOP @i univer
                                                                           FROM          deal
                                                                           WHERE      data = @data
                                                                           ORDER BY univer ASC) t2
                                                   ORDER BY t2 .univer DESC);
UPDATE    deal    SET              ost = @ostatok     WHERE     uni = @univer AND data = @data + 1;
SET   @i = @i + 1; 
END;


Добавлено через 5 минут и 21 секунду
Если TOP(@i) то ошибка синтаксиса там где '('. Если просто число,то ошибок нет =(

Автор: Servena 9.10.2007, 12:55
Так ошибка была в лишней скобке?

Автор: Lunatikus 9.10.2007, 12:59
да,а вот новая не знаю,в чем. Но видимо именно в TOP(@i).TOP (@i) тоже пробовал.

Автор: Lunatikus 9.10.2007, 13:14
блин,ведь в справке правильно же написано,что с переменными надо использовать скобки,так почему не работает????я сейчас что-нибудь буду ломать...

Добавлено через 9 минут и 9 секунд
забавно...даже простейший запрос
Код

DECLARE @i int
SET @i=1
SELECT TOP (@i) * FROM table

выжает ошибку рядом с '('    >_>

Автор: Servena 9.10.2007, 14:24
Код

DECLARE @i int
SET @i=1
SELECT TOP (@i) * FROM _table

Вот такой код у меня не выдает ошибку. Слово table - системное, поэтому обрати внимание на подчеркивание перед ним. Кстати, у меня версия 2005.

Автор: Lunatikus 9.10.2007, 15:22
а у меня выдает,забавно,не правда ли?У тебя какая версия?У меня MS SQL 2000.

Автор: Servena 9.10.2007, 15:35
Понятно, у нас просто разные версии. Закрывай тему, спасибо за дискуссию.

Автор: Lunatikus 9.10.2007, 15:40
что значит закрывай тему??Неужели в 2000ом нельзя решить мою проблему таким путем?

Автор: SergKO 10.10.2007, 05:29
2000-й не поддерживает переменные в TOP. Если надо использовать переменную, то используйте либо динамический запрос, либо ROWCOUNT 
Код

declare @i int;
-- ROWCOUNT
    select @i = 1;

    set ROWCOUNT @i;
    select * from _table;
    set ROWCOUNT 0;
-- динамический
declare    @sql nvarchar(100);

    select @sql = N'select top '+convert(nvarchar(10), IsNull(@i, 1))+' * from _table;';
    execute sp_executesql @sql;

Автор: Lunatikus 10.10.2007, 08:08
спасибо,то что надо  smile 

Автор: setnull 11.12.2007, 22:13
А для top'а, случайно, не является обязательным условием order by?

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