Форум: "Базы";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
ВнизОшибка в процедуре при выполнении EXEC sp_MSdependencies Найти похожие ветки
← →
Ольга © (2007-07-10 13:31) [0]Вот кусок из хр. процедуры (MSSQL-2000), которая складывает во временную табличку результат выполнения системной процедуры sp_MSdependencies:
CREATE TABLE #temp1 (T int, N varchar(250), Own varchar(20), S int)
INSERT INTO #temp1 EXEC sp_MSdependencies
SELECT * FROM #temp1
Процедура выдает ошибку, не смотря на то, что все делает, как надо - таблица с данными формируется.
Ошибка такая:
Server: Msg 3021, Level 16, State 1, Line 1
Cannot perform a backup or restore operation within a transaction.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.
Не могу понять, что ей от меня надо - никаких транзакций и бэкапов я не делаю, процедура простейшая. Помогите...
← →
Ega23 © (2007-07-10 13:43) [1]
> Ольга © (10.07.07 13:31)
Что-то подобное не так давно у меня было. Сейчас постараюсь найти...
← →
AZIZE © (2007-07-10 14:31) [2]напиши процедуру полностью
← →
Ольга © (2007-07-10 14:46) [3]Вот вся процедура, ошибка выскакивает на "жирной" строке:
CREATE PROCEDURE dbo.adm_GetSysDepend
AS
BEGIN
IF NOT EXISTS (select * from dbo.sysobjects where id = object_id(N"[dbo].[CFG_DBOBJECTS]") and OBJECTPROPERTY(id, N"IsUserTable") = 1)
CREATE TABLE [dbo].[CFG_DBOBJECTS] (
[owner] [varchar] (20) ,
[obj_name] [varchar] (50) ,
[obj_type] [varchar] (10) ,
[index_create] [int] NULL ,
[LoadData] [int] NULL,
[Ignore] [int] NULL,
[usl] [varchar] (100) NULL
) ON [PRIMARY]
CREATE TABLE #temp1 (T int, N varchar(250), Own varchar(20), S int)
INSERT INTO #temp1 EXEC sp_MSdependencies
-- таблицы
DECLARE @T int, @N varchar(250), @Own varchar(20), @S int, @ind int, @strtype varchar(10)
DECLARE Rab CURSOR FOR SELECT * FROM #temp1 ORDER BY S,T
OPEN Rab
-- поле index_create = 999
UPDATE CFG_DBOBJECTS SET index_create=999
FETCH NEXT FROM Rab INTO @T, @N, @Own, @S
SET @ind=1
WHILE @@fetch_status=0
BEGIN
IF @T=8 SET @strtype="U"
ELSE IF @T=256 SET @strtype="TR"
ELSE IF @T=4 SET @strtype="V"
ELSE IF @T=1 SET @strtype="FN"
ELSE IF @T=16 SET @strtype="P"
ELSE SET @strtype=""
IF @strtype<>""
BEGIN
IF EXISTS(SELECT 1 FROM CFG_DBOBJECTS WHERE owner=@Own AND obj_name=@N AND obj_type=@strtype)
UPDATE CFG_DBOBJECTS SET index_create=@ind
WHERE owner=@Own AND obj_name=@N AND obj_type=@strtype
ELSE
INSERT INTO CFG_DBOBJECTS (owner, obj_name, obj_type, index_create)
VALUES (@Own, @N, @strtype, @ind)
SET @ind=@ind+1
END
FETCH NEXT FROM Rab INTO @T, @N, @Own, @S
END
DEALLOCATE Rab
END
Процедура создает/обновляет таблицу зависимостей объектов БД CFG_DBOBJECTS. В дальнейшем по полю index_create генерируются скрипты создания объектов БД в правильной последовательности (MSSQL это делает в нужной последовательности только для таблиц). Может есть другие, более эффективные решения?
← →
AZIZE © (2007-07-10 15:09) [4]Скинь мыло завтра вышлю книгу с др. решениями
← →
Ольга © (2007-07-10 15:20) [5]Я кое-чего поперечитала - в основном только декларация теоретический решений, которые не выдерживают практики.
Интересно, что вы предложите (надеюсь не поваренную книгу, с вами, мужчинами, это иногда случается)
roeva@ural.so-cdu.ru
Спасибо.
← →
AZIZE © (2007-07-10 15:34) [6]Поваренную книгу точно не пришлю - нету :)
← →
Ega23 © (2007-07-10 15:53) [7]Шаманил-шаманил - ничего сделать не сумел... :(
НА sql.ru пробовала вопрос задать?
← →
Stanislav © (2007-07-10 16:16) [8]А 2005 работает без ошибок :-)
← →
Anatoly Podgoretsky © (2007-07-10 16:16) [9]В первую очередь там, там отличный форум по MS SQL
А данный вопрос вообще к Дельфи не относится.
← →
Ольга © (2007-07-10 16:17) [10]Вопрос не задавала (забыла свой заход, жду когда придет по почте), но по теме поискала: аналогичные вопросы есть - ответов нет.
В SQL Books Online вроде нашла ответ:
A ROLLBACK statement in the stored procedure referenced by an INSERT...EXEC statement causes the entire transaction to be rolled back and the batch stops executing. The version 6.x supportability is available only when the compatibility setting is equal to 60 or 65.
Expect different results as compared to earlier versions of SQL Server. Set the compatibility setting to 60 or 65 by executing sp_dbcmptlevel to retain version 6.x functionality for ROLLBACK statement behavior inside an INSERT...EXEC statement. Otherwise, use a compatibility setting of 80.
Пробовала поэкспериментировать с версиями - к хорошему это не привело. Возможно это мой кадочный английский и я не правильно перевожу. Если не трудно - попробуйте объяснить по-русски для "особо одаренных".
← →
Stanislav © (2007-07-10 16:20) [11]Это относится к 6-й версии у тебя 8-я.
Переходи на 9-ю (2005)...
← →
Ega23 © (2007-07-10 16:23) [12]
> A ROLLBACK statement in the stored procedure referenced
> by an INSERT...EXEC statement causes
Смотрел текст sp_MSdependencies, нигде Rollback не увидел...
← →
Ольга © (2007-07-10 16:25) [13][8]
Вы в 2005 пробовали выполнить прямо эту процедуру и нет ошибки? Или вы так думаете?
Может 2005-ый уже и сам генерит скрипты БД в нужной последовательности?
Я пока не могу перейти на 2005, но если все так, это радует!
← →
Stanislav © (2007-07-10 16:29) [14]У меня 2 сервера 2000-й и 2005-й я пробовал там и там, в 2000 ошибка есть 2005 - нет .
← →
Stanislav © (2007-07-10 16:30) [15]По поводу скриптов незнаю.
← →
Ольга © (2007-07-10 16:33) [16]Ура!
Я пока тупо поставлю в программе try ... except без обработки.
Да, нехорошо, так ведь и 2005-ый не загорами...
Спасибо.
← →
Stanislav © (2007-07-10 17:08) [17]Есть программа специально для MSSQL которая генерирует скрипты сравнивает базы обновляет объекты, если честно я не пользовался ей, но можете скачать посмотреть вот ссылка
http://rapidshare.com/files/37600213/EMSSQLMS2006SQLS1006.rar.html
пароль на архив www.philka.ru
в принципе можете на сайте www.philka.ru и почитать о ней
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c