Перейти до вмісту

MS SQL Server 2000


Повідомлень в темі: 4

#1 Андре

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 134 повідомлень
  • Стать:Чоловік
  • Місто:Тернопіль

Відправлено 04.06.2008 – 11:45

  • 4
Не знайшовши такого розділу - вирішив створити.
Пропоную викладати тут запитання і відповіді по цій "іграшці".
Почну з запитання.
Є stored-процедура з наступним вмістом:
	BEGIN TRAN tr1
	   declare @d datetime
	   set @d = GETDATE()
	   insert Закази(ДатаПоступления,id_Заказчик,Название,id_Состояние)
	      values(@d,1,'Заказ 1',1)
	   declare @i int
	   select @i=ID from Закази
	      where ДатаПоступления=@d
	   insert Детали(id_Заказ,Название)
	      values(@i,'Деталь 1.1')
	COMMIT TRAN tr1
Тобто початок транзакції, додавання в одну таблицю, додавання в іншу, кінець транзакції.
Якщо одна з цих операцій не виконується, то, по ідеї, вся транзакціє не повинна фіксуватись.
Чомусь цього не відбувається. Тобто, перша операція виконується, друга ні, але дані, вставленні першою операцією присутні в таблиці "Закази".
В чому проблема?

#2 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 04.06.2008 – 12:48

DECLARE @err INT
BEGIN TRANSACTION

   DECLARE @d DATETIME
   SET @d = GETDATE()
   INSERT INTO Закази(ДатаПоступления, id_Заказчик, Название, id_Состояние)
   VALUES(@d, 1, 'Заказ 1', 1)
   SET @err = @@ERROR; IF @err > 0 GOTO finish

   DECLARE @i INT
   SELECT @i = ID FROM Закази
   WHERE ДатаПоступления = @d
   INSERT Детали(id_Заказ, Название)
   VALUES(@i, 'Деталь 1.1')
   SET @err = @@error; --IF @err > 0 GOTO finish

finish:
IF @err = 0 COMMIT TRANSACTION
ELSE ROLLBACK TRANSACTION

  • 0

#3 Андре

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 134 повідомлень
  • Стать:Чоловік
  • Місто:Тернопіль

Відправлено 04.06.2008 – 17:11

Дякую.
Підозрював, що так можна зробити, але думав це буде не дуже правильно, хоч і функціонально.
А без ручних перевірок на помилки ніяк не можна? (просто цікаво)

Повідомлення відредагував Андре: 04.06.2008 – 17:13

  • 0

#4 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 04.06.2008 – 17:47

Не знаю такого способу. Хіба що можна покладати перевірки помилок на ADO.Net чи на чому ти там пишеш.
Можна замість SET @err = @@ERROR; IF @err > 0 GOTO finish написати SET @err = @err | @@ERROR, результат той самий, але довше виконується (подумай чому).

Повідомлення відредагував Lukom: 04.06.2008 – 17:57

  • 0

#5 Андре

    Постійний житель

  • Користувачі
  • PipPipPipPipPip
  • 134 повідомлень
  • Стать:Чоловік
  • Місто:Тернопіль

Відправлено 26.06.2008 – 16:17

HELP! не можу встановити  MS SQL 2000 DE.

на одому комп"ютері в мережі встановлюється, а на іншому не хоче.

Показує таку помилку: www.Andriymk.narod.ru/error.jpg
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних


Магазин кубиков Рубика Cubes.in.ua