powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при update where current of
10 сообщений из 10, страница 1 из 1
Ошибка при update where current of
    #32000537
maximF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При попытке выполнить следующий код (он выглядит немного экзотично, но в принципе может быть полезен), у меня генерится после удивительно долгого раздумья такой errror:
ODBC: Msg 0, Level 19, State 1
SqlDumpExceptionHandler: Process 9 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.

Ошибка возникает в строке "update #a set @j=i=2 where current of cBase"
Интересно, это какая-то особенность моей конфигурации или очередной микрософтовский баг?

А вот и сам код:
/********************************/
create table #a(i int)
insert #a values(12)

declare cBase cursor for select i from #a
open cBase

declare @i int, @j int

fetch next from cBase into @i
update #a set @j=i=2 where current of cBase

close cBase
deallocate cBase
/********************************/

С уважением, Максим
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000540
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update #a set @j=2,i=@j where current of cBase
SELECT * FROM #a
Смотрим и удивляемся ...
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000605
maximF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы здорово, если бы кто-то прогнал вышеприведенный код на своем SQL-сервере и написал, что вышло.
Как видно этот код независит от внешних объектов и вообче неопасный.

Спасибо, Максим.
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000610
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, не имею привычки посылать скрипты, которые не были выполнены.
Кстати, этот выполняется как на 2000, так и на 6.5
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000614
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же фигня и у меня. Похоже это их залепуха. Причем залепуха по-моему в том, что компилятор пропускает присваивания типа @j=i=2. Я чего-то не видел что бы было описано, что так можно писать. Например i=@j=2 не проходит.
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000615
maximF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По предыдущим репликам:
1. Я выполнял этот batch на MS SQL 7.0 на двух разных серверах - ошибка была. Насчёт MS SQL 6.5, 2000 ничего сказать не могу.
2. Не понял, что имел в виду уважаемый Fompro, когда говорил "Простите, не имею привычки посылать скрипты, которые не были выполнены".
3. Синтаксис update ... set @variable=column=expression допустим (см. Books Online), в отличие от update ... set column=@variable=expression.
4. Так что ошибка вызывает, по всей видимости, сочетание операции из пункта 3, и апдейта с использованием курсора.

Максим.
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000623
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, видимо не понял Ваше предыдущее замечание. Синтаксис set @variable=column=expression вызывает ошибку во всех версиях.
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000653
Stork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прогонял исходный код и код с исправлениями (первый ответ) на 6.5. Оба работают идентично, не выдавая никаких ошибок. На 7.0 потребовалось вместо
create table #a(i int)
написать
create table #a(i int not null)
Все работало идентично в обоих вариантах, однако для варианта с
update #a set @j=2,i=@j where current of cBase
не требовалось исправлять строку создания таблицы, ибо конфликта null и not null типов уже не было.

С уважением,
Александр
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000656
maximF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первоначальная версия кода была синтаксически правильной.
Cинтаксис update ... set @variable=column=expression допустим.
Цитата из Books Online:
UPDATE
{
table_name WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited
}
SET
{column_name = {expression | DEFAULT | NULL}
| @variable = expression
| @variable = column = expression } [,...n]

{{[FROM {<table_source>} [,...n] ]
и т.д.
Такой синтаксис может использоваться для присваивания колонке [table.i] последовательных целых значений (как это было указано в одном из номеров рассылки по MS SQL на subscribe.ru):
declare @counter=0
update [table] set @counter=i=@counter+1.

Исправленный вариант (ответ №1) никакого интереса не представляет, поскольку не вызывает ошибки при исполнении.
...
Рейтинг: 0 / 0
Ошибка при update where current of
    #32000668
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я надеялся, что дискуссия закончена, но ...
Последняя фраза сильно смутила меня.
"никакого интереса не представляет, поскольку не вызывает ошибки при исполнении."
Так в чём смысл написания программы (запроса, ...)? Вызвать ошибку? Или всё-таки написать правильную конструкцию?
Конструкция update ... set @variable=column=expression действительно допустима ...
Но! Только в чистом UPDATE. Применение её в курсоре приводит к вышеописанной ошибке. Надеюсь, все согласятся, что работа в рамках курсора зто отдельная песнь. А Books Online - не священная корова.
Остаюсь и проч. ...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при update where current of
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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