Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> в чем ошибка синтаксиса? 
V
    Опции темы
Lunatikus
Дата 9.10.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Код

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'
В упор не вижу.В чем моя ошибка,подскажите,пожалуйста.

Это сообщение отредактировал(а) Lunatikus - 9.10.2007, 11:12


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Servena
Дата 9.10.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Попробуй заменить i например на ii
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



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


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



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


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Servena
Дата 9.10.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Так, с @i будет правильно так - TOP(@i), а со второй ошибкой нужно еще по разбираться.
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



вторую ошибку нашел и все остальные тоже)
Код

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) то ошибка синтаксиса там где '('. Если просто число,то ошибок нет =(

Это сообщение отредактировал(а) Lunatikus - 9.10.2007, 12:39


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Servena
Дата 9.10.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Так ошибка была в лишней скобке?
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



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


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



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

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

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

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


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Servena
Дата 9.10.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Код

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

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

PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



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



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Servena
Дата 9.10.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Понятно, у нас просто разные версии. Закрывай тему, спасибо за дискуссию.
PM MAIL   Вверх
Lunatikus
Дата 9.10.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



что значит закрывай тему??Неужели в 2000ом нельзя решить мою проблему таким путем?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
SergKO
Дата 10.10.2007, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



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;

PM MAIL   Вверх
Lunatikus
Дата 10.10.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



спасибо,то что надо  smile 


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.