|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
При попытке выполнить следующий код (он выглядит немного экзотично, но в принципе может быть полезен), у меня генерится после удивительно долгого раздумья такой 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 /********************************/ С уважением, Максим ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 15:14 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
update #a set @j=2,i=@j where current of cBase SELECT * FROM #a Смотрим и удивляемся ... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 16:05 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Было бы здорово, если бы кто-то прогнал вышеприведенный код на своем SQL-сервере и написал, что вышло. Как видно этот код независит от внешних объектов и вообче неопасный. Спасибо, Максим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2000, 11:36 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Простите, не имею привычки посылать скрипты, которые не были выполнены. Кстати, этот выполняется как на 2000, так и на 6.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2000, 12:44 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Та же фигня и у меня. Похоже это их залепуха. Причем залепуха по-моему в том, что компилятор пропускает присваивания типа @j=i=2. Я чего-то не видел что бы было описано, что так можно писать. Например i=@j=2 не проходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2000, 13:19 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
По предыдущим репликам: 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, и апдейта с использованием курсора. Максим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2000, 13:43 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Простите, видимо не понял Ваше предыдущее замечание. Синтаксис set @variable=column=expression вызывает ошибку во всех версиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2000, 20:51 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Прогонял исходный код и код с исправлениями (первый ответ) на 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 типов уже не было. С уважением, Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2000, 05:03 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Первоначальная версия кода была синтаксически правильной. 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) никакого интереса не представляет, поскольку не вызывает ошибки при исполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2000, 15:37 |
|
Ошибка при update where current of
|
|||
---|---|---|---|
#18+
Я надеялся, что дискуссия закончена, но ... Последняя фраза сильно смутила меня. "никакого интереса не представляет, поскольку не вызывает ошибки при исполнении." Так в чём смысл написания программы (запроса, ...)? Вызвать ошибку? Или всё-таки написать правильную конструкцию? Конструкция update ... set @variable=column=expression действительно допустима ... Но! Только в чистом UPDATE. Применение её в курсоре приводит к вышеописанной ошибке. Надеюсь, все согласятся, что работа в рамках курсора зто отдельная песнь. А Books Online - не священная корова. Остаюсь и проч. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2000, 17:31 |
|
|
start [/forum/topic.php?fid=46&msg=32000537&tid=1827633]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 243ms |
total: | 525ms |
0 / 0 |