Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что с курсором? / 20 сообщений из 20, страница 1 из 1
02.10.2002, 19:24:36
    #32054956
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
6.5
Есть хранимая процедура, в ней открывается курсор на обновление. Если запускать в ЕМ, то все работает правильно, в цикле происходит перемещение по всем записям курсора, и все записи обновляются правильно. Если же запускать ее из клиента (VB6), то процедура работает неправильно. Обновляются не все записи, причем они всегда идут подряд и с конца. Например, последние 3 записи, а в другой раз может 2 или 5. Такое ощущение, что цикл выполняется не до конца, и заканчивается до того как обработана последняя запись. Причем, никогда не обновляются все записи. Обязательно несколько последних остается необновленными.
Из клиента запускаю процедуру следующим образом
Dim MyConnection as new ADODB.Connection
..........
MyConnection.Execute("MyProc param1, param2")

Сообщений об ошибках нет. В ЕМ процедура работает всегда, так как и должна. В процедуру нет никаких сравнений со значением getdate().
...
Рейтинг: 0 / 0
03.10.2002, 00:28:06
    #32055004
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Плиз, помогите. База рабочая, позарез надо. Не могу же я на работу в 6-00 приходить каждый день, чтоб эти несколько записей обновить как надо.
...
Рейтинг: 0 / 0
03.10.2002, 01:31:25
    #32055008
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Два варианта:

1. Cамостоятельно трассируете (вроде в 6 было приложение SQL Tracer?) вызовы из VB
2. Приводите код процедуры

Удачи
...
Рейтинг: 0 / 0
03.10.2002, 09:48:01
    #32055031
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Попробуй STATIC-курсор
...
Рейтинг: 0 / 0
03.10.2002, 10:06:54
    #32055046
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
А как у вас с ORDER BY в курсоре дела обстоят?
...
Рейтинг: 0 / 0
03.10.2002, 10:10:57
    #32055048
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
А для этого куска кода мож DB-libriry -использовать?(не помню как точно пишется?) Всё равно не собираешься уходить с 6.5 :))
...
Рейтинг: 0 / 0
03.10.2002, 10:13:00
    #32055051
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Для процедуры, очевидно, всё равно, откуда запускать.
Я думаю, причина - разные настройки коннекта.
Выясните их в вашем приложении и в QA.
...
Рейтинг: 0 / 0
03.10.2002, 10:17:41
    #32055053
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
а не может быть так....
что когда вы запускаете процу из QA вы работаете с базай один....
а когда из приложения то работают еще люди....
может тип курсора не тот.....
...
Рейтинг: 0 / 0
03.10.2002, 14:16:50
    #32055175
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
CREATE PROCEDURE sp_ChangePathDateCopyer(@DateStart char(8))
AS

if (not exists (SELECT ID FROM PathCopyer WHERE DateFrom=@DateStart OR DateTo=@DateStart))
BEGIN

DECLARE UpdateCursor CURSOR FOR SELECT ID, DateFrom, DateTo FROM PathCopyer WHERE DateFrom <> null OR DateTo <>NULL ORDER BY ID
OPEN UpdateCursor
FETCH UpdateCursor
WHILE @@Fetch_Status=0
begin
UPDATE
PathCopyer
SET
DateFrom=case DateFrom
when null then null
else @DateStart
end,
DateTo=case DateTo
when null then null
else @DateStart
end
WHERE CURRENT OF UpdateCursor
FETCH UpdateCursor
END
CLOSE UpdateCursor
DEALLOCATE UpdateCursor
END


ID - ключевое поле, по началу в курсоре его не было (кластеред), но вычитал, что лучше его использовать, потому что
без него не известно какое поле выберет сервер для упорядочивания перемещений по записям курсора в цикле.
Я думал, что это поможет, потому как в курсоре обновляются оба поля DateFrom и DateTo, одно из которых точно и использовалось
для упорядочивания. Не помогает, результат прежний. Плиз, очень нужно разобраться!
Да, еще такой момент. Теперь перестали именно обновляться конкретные записи, 7 последних записей.
Последних, это если их выводить запросом с ORDER BY ID,
т.е. в таком же порядке как по ним перемещается курсор.
Или он не в таком порядке перемещается?

4 akuz
ORDER BY тоже не помог

4 dao
Что ж мне и OLEDB и ADO использовать сразу. Нехочется так. Да и зачем? Ведь все, что OLEDB позволяет можно сделать с помощью T-SQL (так мне кто-то когда-то ответил на вопрос и это так и есть)

4 MiCe
Дело обстоит так.
Эта процедура запускается один раз в сутки, в 00-00.
В это время у нас на работе никого как бы нет. Соединение с БД может быть только одно (одна клиентская часть болтается на сервере). Это и поддтверждают логи, что после рабочего дня никаких коннектов к базе не происходит. Когда я все это запускал я отрубал всех от БД и закрывал им к ней доступ. Просто засунуть эту процедуру в шедулер на сервере не могу. Запуском этой процедуры должен управлять человек из клиентской части, который не может управлять ее выполнением через шедулер. Т.е. не факт, что нужно обязательно каждый день в 00-00, может сегодня запускать, а потом пару дней нет.

Ужас, сегодня опять пришлось вручную все обновлять =(
...
Рейтинг: 0 / 0
03.10.2002, 14:23:22
    #32055178
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
а зачем здесь курсор?
...
Рейтинг: 0 / 0
03.10.2002, 14:30:27
    #32055179
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
такая конструкция не подходит?
BEGIN TRAN
UPDATE PathCopyer SET DateFrom =@DateStart WHERE DateFromIs Not Null
UPDATE PathCopyer SET DateTo =@DateStart WHERE DateFromIs Not Null
COMMIT TRAN
...
Рейтинг: 0 / 0
03.10.2002, 14:56:29
    #32055188
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
4 Nickolay

Просто ситуация такая, что на PathCopyer висит триггер на insert и update, который проверяет какое количество записей обновляется. Если >1, то делает откат, тем самым не давая обновить сразу несколько записей. Такова логика приложения, и думаю, что нельзя ее назвать неправильной. По его логике обновление нескольких записей сразу не должно проходить. Если апдейт обновляет только одну запись, то он должен проходить, иначе (если нужно обновить несколько записей) только курсором. В тригере происходит некоторая обработка записей, причем она не может работать с выборкой, а только с одной записью. Не буду описывать, что да как, просто примите это как факт, что можно сделать только так.
...
Рейтинг: 0 / 0
03.10.2002, 15:29:37
    #32055196
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
это триггер на апдейт

CREATE TRIGGER ut_PathCopyer ON dbo.PathCopyer
FOR UPDATE
AS
IF (@@ROWCOUNT<>1) ROLLBACK
ELSE IF (UPDATE(PathFrom) OR UPDATE(DateFrom) OR UPDATE(PathTo) OR UPDATE(DateTo) OR UPDATE(Op)) AND (NOT Update(IDDeleted) AND NOT Update(OpOrder))
BEGIN
DECLARE @MaxIDDeleted int

SELECT @MaxIDDeleted=isnull(max(ID),0)+1 FROM DeletedPathCopyer
UPDATE PathCopyer SET IDDeleted=@MaxIDDeleted WHERE ID=(SELECT ID FROM INSERTED)
INSERT DeletedPathCopyer (ID,PathFrom,DateFrom,PathTo,DateTo,Op) SELECT @MaxIDDeleted,PathFrom,DateFrom,PathTo,DateTo,Op FROM INSERTED
END
GO
...
Рейтинг: 0 / 0
03.10.2002, 15:33:13
    #32055197
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
и в DeletedPathCopyer получается что-то вроде архива в записей PathCopyer
...
Рейтинг: 0 / 0
03.10.2002, 15:41:03
    #32055199
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
понимает ли 6.5 такой синтаксис как
alter table tablename disable trigger triggername
если понимает - то выключите его
и сделайте как пишет Nickolay + алгоритм триггера....
...
Рейтинг: 0 / 0
03.10.2002, 15:44:15
    #32055200
Alex_B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Не знаю в чём корень Вашего зла кроится но вот выражение в SP:
DateFrom <> null OR DateTo <>NULL
На мой взгляд однозначно надо поменять на:
DateFrom is not null OR DateTo is not NULL
A то как то неоднозначно получается.
...
Рейтинг: 0 / 0
03.10.2002, 16:16:32
    #32055217
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
4 MiCe

Я уже с этим сталкивался, 6.5, помоему, такого не понимает, толко удаление и после опять создание тригера.
Но вопрос не в том как обойти триггер, а как правильно заставить работать курсор.
Может быть alexeyvg по поводу настроек сервера и клиента объяснит поконкретнее, что имеется ввиду? Параметры ADODB.Connection?

4 Alex_B
В WHERE без разницы, что <>NULL, что is not NULL. Тут скорее неоднозначно можно воспринять null и NULL =)

Может и в заправду дело в клиенте???
...
Рейтинг: 0 / 0
03.10.2002, 16:21:30
    #32055221
Alex_B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
Вспомнил был и у меня подобный баг. Попробуйте в SP поставить:
SET NOCOUNT ON
...
Рейтинг: 0 / 0
03.10.2002, 16:28:39
    #32055229
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
4 Nickolay

На

DECLARE UpdateCursor CURSOR STATIC ....

сервер ругается.

А такое можно в 6.5? Я просто не знаю. Нет помоему.

По всей видимости что-то происходит с записями в курсоре
в то время пока они перебираются в цикле. Я имею ввиду расположение записей в курсоре. Но там ведь кластерный индекс, вроде его и должен использовать сервер при создании курсора, я его не обновляю, значит и порядок записей в созданном курсоре не должен меняться. Так или не так? И записи в цикле должны перебираться в соответствии с этим порядком. Или все совсем не так?
...
Рейтинг: 0 / 0
03.10.2002, 16:37:18
    #32055237
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что с курсором?
СПАСИБО 4 Alex_B!!!!!!

РАБОТАЕТ!!!!!!!!!!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что с курсором? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]