Страница 1 из 1

SQL SERVER- ошибка при UPDATE

Добавлено: 11 апр 2008, 09:38
Daiver
При UPDATE таблицы возникает ошибка -

Server: Msg 4701, Level 11, State 1, Procedure T$SPSTEP_U, Line 15
Could not truncate table '#xx$locks' because this table does not exist in database

Запрос на незаполненной тестовой базе ошибок не дает, ошибка только на рабочей

Запрос -

UPDATE T$SPSTEP
SET T$SPSTEP.F$KOL=0, T$SPSTEP.F$KOLSKL=0
FROM T$BASEDOC RIGHT OUTER JOIN
T$STEPDOC ON T$BASEDOC.F$NREC = T$STEPDOC.F$CBASEDOC RIGHT OUTER JOIN
T$SPSTEP LEFT OUTER JOIN
T$KATMC ON T$SPSTEP.F$CMCUSL = T$KATMC.F$NREC ON T$STEPDOC.F$NREC = T$SPSTEP.F$CSTEPDOC
WHERE (CONVERT(varchar(10), dbo.IntToDatetime(T$BASEDOC.F$DDOC), 105) = '31-12-2004') AND
(T$KATMC.F$NAME = 'Горячее водоснабжение' OR T$KATMC.F$NAME = 'Вода горячая на отопление')

Добавлено: 11 апр 2008, 12:33
thor
Было такое вроде, после установки Атлантиса 5.3
Лечили, если память не изменяет, chkmssql.exe на испраыление системных объектов и триггеров по всем таблицам БД

Добавлено: 11 апр 2008, 12:43
Алексей
thor
добавлю только что нормальный чек для MSSQL только к 5.3.19 появился... старый создавал процедуры не под тем юзером и без паблик прав.
так что качните самый свежий с фтп.

Добавлено: 18 июн 2008, 15:52
PViP
решалась ли проблема у автора?
У нас такая же проблема при update, точно такая же ошибка! Проверил тригера и хранимые процедуры chkmssql 5.3.21 - грит что все корректно, ошибка не ушла!

ЧТо делать?

Причем в тестовой бд созданной при помощи msinst 5.3.22 запрос отрабатывается! Сами тригера сравнил в тестовой и в моей бд - идентичны!

Попутно вопрос, что за табла #xx$locks, в базе явно ее нет!?

Добавлено: 27 июн 2008, 13:30
PViP
Решение 1: Закоментировать в тригере строкикоторые косячат, выполнить что надо, вернуть тригер в прежнее полжение.

Решение 2: убить тригер , выполнить запрос, вернуть тригер обратно

Решение 3(высказанное ТП): ПРи каждом соединении с БД средствами сторонними от галактических(query analyzer к примеру) создавать таблицу #xx$locks, например вот так:

Код: Выделить всё

if not exists (select * from dbo.sysobjects where id = object_id(N'[xx$locks]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

create table #xx$locks (TableNRec binary(8))

При потери соединения, табла магически теряется, или она какая-то временная походу!

Сразу могу сказать, что проверка базы chkmssql ни чего не дает, так как так и должно быть!

Видимо табла #xx$locks создается при соединении галактических сырцов с БД !