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

Откуда:
Сообщений: 6
Здравствуйте!

Пишу приложение для работы с БД MSSQL и столкнулся с проблемой. На самом Mssql написал небольшой триггер для проверки длины
поля:

ALTER TRIGGER [dbo].[CheckOwner]
   ON  [dbo].[tblHostel] 
   AFTER  UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	if(select LEN(Owner) from inserted)<4
	BEGIN
	RAISERROR ( 'Слишком короткое значения поля "Балансодержатель"', 16, 1)
	ROLLBACK TRANSACTION
	END
	END


При работе с таблицей в Management Studio триггер работает адекватно. При работе с таблицей в приложении (Visual Studio) на редактирование триггер работает нормально, но на добавление новой записи все время срабатывает независимо от длины проверяемого поля. Не могу понять в чём проблема?
24 сен 14, 11:55    [16614857]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
Glory
Member

Откуда:
Сообщений: 104751
SoerKosolapiy
но на добавление новой записи все время срабатывает независимо от длины проверяемого поля. Не могу понять в чём проблема?

Триггер AFTER UPDATE ну никак не может срабатывать на команду добавления новой записи.
Поэтому вам необходимо узнать, что же за команду UPDATE вдруг Visual Studio начинает выполнять.
24 сен 14, 12:05    [16614910]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
SoerKosolapiy
Member

Откуда:
Сообщений: 6
Glory,извиняюсь.не тот код вставил.вот правильный.

ALTER TRIGGER [dbo].[CheckOwner]
   ON  [dbo].[tblHostel] 
   AFTER  INSERT,UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	if(select LEN(Owner) from inserted)<4
	BEGIN
	RAISERROR ( 'Слишком короткое значения поля "Балансодержатель"', 16, 1)
	ROLLBACK TRANSACTION
	END
	END
24 сен 14, 12:10    [16614929]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SoerKosolapiy,

и попробуйте проапдейтить две записи одной командой UPDATE.
24 сен 14, 12:11    [16614939]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SoerKosolapiy,

вообще-то, для таких целей больше подходит CHECK CONSTRAINT
24 сен 14, 12:13    [16614948]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
Glory
Member

Откуда:
Сообщений: 104751
SoerKosolapiy
Glory,извиняюсь.не тот код вставил.вот правильный.

А текст команды, для которой "все время срабатывает независимо от длины проверяемого поля" ?
24 сен 14, 12:14    [16614956]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Я думаю, вставляется Owner IS NULL.
Возможно, по дефолту (а DEFAULT CONSTRAINT отсутствует)
24 сен 14, 12:16    [16614977]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SoerKosolapiy,

что Вы знаете про выражения с участием NULL?
24 сен 14, 12:17    [16614986]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
SoerKosolapiy
Member

Откуда:
Сообщений: 6
Glory,нашёл проблему. Дико затупил...забыл указать в хранимой процедуре размер nvarcharo'вской переменной. Поэтому по-дефолту туда передавался только один символ от строки и срабатывало условие в триггере.
24 сен 14, 13:17    [16615527]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
SoerKosolapiy,
inserted - ТАБЛИЦА

if(select max(LEN(Owner)) from inserted)<4
24 сен 14, 13:21    [16615551]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
StarikNavy,

ссори, не max, a min
24 сен 14, 13:22    [16615559]     Ответить | Цитировать Сообщить модератору
 Re: Работа триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
StarikNavy
StarikNavy,

ссори, не max, a min
IF EXISTS(SELECT * FROM inserted WHERE Owner NOT LIKE '____%')
24 сен 14, 13:25    [16615595]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить