Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Курсоры  [new]
Roi063
Guest
Разработать курсор, в который передать следующие данные: номер накладной, дату накладной. наименование товара, количество, цену, стоимость товара. Обработать курсор так, чтобы после выдачи данных для каждой накладной показывать общуу сумму в накладной.

Подскажите что и как делать. С курсорами никогда не работал.
5 мар 13, 12:49    [14013703]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roi063
Подскажите что и как делать. С курсорами никогда не работал.

Начните с изучения синтаксиса.
5 мар 13, 12:50    [14013711]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Roi063
Guest
Glory,

надо очень срочно. времени нет.
5 мар 13, 12:52    [14013736]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roi063
надо очень срочно. времени нет.

Тогда читайте быстро.
5 мар 13, 12:53    [14013740]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Roi063
Guest
Glory,

если не хочешь помогать, зачем сидеть и острить?
5 мар 13, 12:56    [14013760]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roi063
если не хочешь помогать, зачем сидеть и острить?

Если нужно, чтобы кто-то сделал за тебя задание, то зачем обращаться на форум ?
Заплати деньги специалисту и получи "товар".
5 мар 13, 12:58    [14013774]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Roi063
если не хочешь помогать, зачем сидеть и острить?


Затем, чтобы потом не собеседовать окончившых ВУЗ по специальности Информатик-Экономист и имеющих 0 знаний.
5 мар 13, 13:01    [14013796]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Roi063
Подскажите что и как делать.

Для начала можете прочитать это.
5 мар 13, 13:14    [14013913]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Gwa
Guest
Roi063,[url=]http://datasql.ru/basesql/13.htm[/url]
5 мар 13, 13:31    [14014072]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
emen
Member

Откуда:
Сообщений: 3
Вот код, который я написал. Выдаёт ошибку. Что-то с function. К сожалению, сейчас точнее сказать не могу, т.к. сама база находится на другом компьютере. Извиняюсь за выше написанные сообщения. Нервничал очень.

declare 
@n_nakl smallint,
@data_nakl smalldatetime,
@n_tov varchar(25),
@kol int,
@cena decimal(7,2),
@stoim decimal(7,2),
@osum decimal(7,2)
declare cur00 cursor static for
select n.n_nakl, n.data_nakl,p.n_tov,t.cena, t.kol, Sum(t.kol*t.cena) as stoimost, count(Sum(t.kol*t.cena)) as osum
from Tovar_v_nakl t inner join nakladnay n on t.n_nakl=n.n_nakl inner join price_list p on 
t.k_tov=p.k_tov 
group by n.n_nakl
return


open cur00
fetch next from cur00
into @n_nakl, @data_nakl, @n_tov,@kol,@cena, @stoim ,@osum
while @@fetch_status=1
begin
select n_nakla=@n_nakl,data=@data_nakl, n_tova=@n_tov, kolvo=@kol, cen=@cena, stoimo=@stoim, osuma=@osum
end
close cur00
6 мар 13, 01:40    [14017259]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
emen
Выдаёт ошибку. Что-то с function. К сожалению, сейчас точнее сказать не могу, т.к. сама база находится на другом компьютере.
Без сообщения об ошибке её исправить невозможно, так что получайте доступ к сиквелу.

Как минимум, у вас есть агрегатная функция, но в group by входят не все поля, которые без агрегатных функций. Т.е. нужно писать group by n.n_nakl, n.data_nakl, p.n_tov, t.cena, t.kol
6 мар 13, 08:35    [14017515]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
qow
Member [заблокирован]

Откуда:
Сообщений: 38
alexeyvg,

return

там шутки ради, правда? И static-курсоры "только для чтения", а у Вас вроде как предполагается изменение данных из этого курсора.
6 мар 13, 08:57    [14017592]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры  [new]
Гость333
Member

Откуда:
Сообщений: 3683
decimal(7,2)
Здесь не слишком маленькая размерность? Максимум, что сюда поместится — 99999 рублей 99 копеек.

count(Sum(t.kol*t.cena))
Нельзя вкладывать агрегатные функции друг в друга. Что вы хотели подсчитать при помощи этого выражения?

group by n.n_nakl
Все значения, перечисленные в select, должны входить либо в group by, либо быть внутри агрегатных функций. То есть в group by у вас не хватает "n.data_nakl,p.n_tov,t.cena, t.kol".

return
По достижении этой команды выполнение пакета завершается. Убирайте.

while @@fetch_status=1
Смотрите документацию по @@fetch_status. Значение 1 эта функция не возвращает никогда. Только 0, -1, -2. Вам нужно значение, означающее "The FETCH statement was successful".

while @@fetch_status=...
begin
select n_nakla=@n_nakl,data=@data_nakl, n_tova=@n_tov, kolvo=@kol, cen=@cena, stoimo=@stoim, osuma=@osum
end

Если SQL Server попадёт внутрь этого цикла, то "наружу" уже никогда не выберется, т.к. отсутствуют выражения, меняющие условие "@@fetch_status=...". Подсказка: значение функции @@fetch_status изменяется после выполнения команды fetch.

Это замечания, возникшие только при анализе кода, без сопоставления с условием задачи.
6 мар 13, 11:11    [14018316]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить