Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вставка NULL в NOT NULL столбец  [new]
Морфий
Member

Откуда:
Сообщений: 168
Добрый день.

Как сделать так чтобы при вставке NULL значения в столбец NOT NULL, происходил откат всей транзакции?
MSSQL 2005

Пример таблицы
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[test_null](
	[n_value] [nchar](10) NULL,
	[nn_value] [nchar](10) NOT NULL
) ON [PRIMARY]


Скрипт
begin tran
INSERT INTO [dbo].[test_null] (n_value, nn_value) VALUES ('v1', 'nv1');
INSERT INTO [dbo].[test_null] (n_value, nn_value) VALUES ('v2', null);
-- Тут должна произойти ошибка и следующая строка не должна выполняться!
INSERT INTO [dbo].[test_null] (n_value, nn_value) VALUES ('v3', 'nv3');

commit tran;
GO


А по факту получем вставку двух строк, первой и третьей
(строк обработано: 1)
Сообщение 515, уровень 16, состояние 2, строка 4
Не удалось вставить значение NULL в столбец "nn_value", таблицы "isbank.dbo.test_null"; в столбце запрещены значения NULL. Ошибка в INSERT.
Выполнение данной инструкции было прервано.

(строк обработано: 1)


Спасибо.
2 ноя 15, 11:27    [18357866]     Ответить | Цитировать Сообщить модератору
 Re: Вставка NULL в NOT NULL столбец  [new]
Glory
Member

Откуда:
Сообщений: 104751
Морфий
Как сделать так чтобы при вставке NULL значения в столбец NOT NULL, происходил откат всей транзакции?

1. Обрабатывать ошибку самому
2. Читать про SET XACT_ABORT
2 ноя 15, 11:28    [18357881]     Ответить | Цитировать Сообщить модератору
 Re: Вставка NULL в NOT NULL столбец  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Морфий,

В начале транзакции
SET XACT_ABORT ON;
2 ноя 15, 11:29    [18357890]     Ответить | Цитировать Сообщить модератору
 Re: Вставка NULL в NOT NULL столбец  [new]
Морфий
Member

Откуда:
Сообщений: 168
Glory, iap, спасибо! То что нужно.
2 ноя 15, 11:47    [18358025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить