Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.047 c
2-1193163627
opoloXAI
2007-10-23 22:20
2007.11.18
Как вставить в TEdit знак "&amp;#216;"?


15-1192633707
Slider007
2007-10-17 19:08
2007.11.18
С днем рождения ! 17 октября 2007 среда


3-1183896477
Ral'f
2007-07-08 16:07
2007.11.18
DBGrid и DBMemo


15-1192375543
исследователь
2007-10-14 19:25
2007.11.18
Размер поля БД


2-1193297737
Ega23
2007-10-25 11:35
2007.11.18
Есть ли у контрола какое-нибудь состояние, типа Destoying?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский