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

Откуда:
Сообщений: 286
Здравствуйте!
Посмотрите, пожалуйста, верно ли написаны триггеры? Почему то не срабатывают.
Сейчас в базе есть этот триггер. По идеи он должен был выдавать сообщение при удалении мастера с имеющего заказ. 
ALTER TRIGGER [dbo].[del_mas]
ON [dbo].[Master]
INSTEAD OF DELETE
AS
IF (SELECT COUNT (*) FROM Zakaz z, DELETED d WHERE z.Tabel_nomer=D.Tabel_nomer)>0
BEGIN
    ROLLBACK TRAN
    PRINT 'Удалить невозможно: имеются заказы'
END
ELSE 
    DELETE [Master] FROM [Master] m
        INNER JOIN DELETED d ON m.Tabel_nomer = d.Tabel_nomer 

Этот триггер должен срабатывать, если попытаться удалить заказ который уже оплачен. 
CREATE TRIGGER [dbo].[del_zakaz] ON [dbo].[Zakaz]
INSTEAD OF DELETE
AS
IF EXISTS(SELECT p.Nomer_zakaza FROM Payments p INNER JOIN DELETED d ON p.Nomer_zakaza = d.Nomer_zakaza)
BEGIN
    ROLLBACK TRAN
    PRINT 'Удалить невозможно: имеются оплаты по данному заказу'
END
ELSE 
    DELETE Zakaz FROM Zakaz z
        INNER JOIN DELETED d ON z.Nomer_zakaza = d.Nomer_zakaza


К сообщению приложен файл (База.rar - 95Kb) cкачать
20 май 13, 18:31    [14323069]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
если строку удалить то она удалиться, но после нажатии на Run она на месте. но сообщение о запрете не приходит
20 май 13, 19:52    [14323296]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Не все клиенты будут рисовать ваш print как ошибку. Делайте raiserror с нормальным severity.
20 май 13, 19:59    [14323314]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
если строку удалить то она удалиться, но после нажатии на Run она на месте

сервер удаляет данные из таблицы, а ваше приложение должно рефрешить набор данных
20 май 13, 19:59    [14323316]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,

Run я нажимал в субд
20 май 13, 20:08    [14323339]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Гавриленко Сергей Алексеевич
Делайте raiserror с нормальным severity.
ааа что это?

То есть триггер рабочий?
20 май 13, 20:22    [14323383]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Vadim33
ааа что это?
Есть документация, в которой есть поиск. Принципиально не желаете пользоваться?
20 май 13, 20:51    [14323444]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
invm,
желаю, но времени нет уже, сдавать проект надо
20 май 13, 21:27    [14323539]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Vadim33
желаю, но времени нет уже, сдавать проект надо
За то время, пока вы ждете, когда вам все разжуют, можно было неоднократно найти и прочитать нужную статью в документации.
20 май 13, 22:11    [14323691]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
Glory,

Run я нажимал в субд

В MSSQL нет никаких Run.

Vadim33
желаю, но времени нет уже, сдавать проект надо

Ну так сдавайте.
20 май 13, 22:20    [14323715]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,

К сообщению приложен файл. Размер - 1Kb
20 май 13, 22:24    [14323726]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
Glory,

Картинка с другого сайта.

И какое отношение кнопка в клиентском приложении имеет к серверу ?
20 май 13, 22:25    [14323730]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,

это в Enterprise Manager. а не моё приложение для работы с бд
20 май 13, 22:28    [14323743]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
это в Enterprise Manager. а не моё приложение для работы с бд

И поэтому Enterprise Manager недостоин звания клиентского приложения, раз не вы его написали ?

Сообщение было отредактировано: 20 май 13, 22:30
20 май 13, 22:30    [14323746]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,

всё. Stop. У меня был единственный вопрос-рабочий ли триггер? а в чате лишь лишние сообщения
20 май 13, 22:33    [14323754]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
У меня был единственный вопрос-рабочий ли триггер?

Что вы понимаете под "работающий триггер" ?
Триггер, который можно создать ?
Триггер, который срабатывает ?
Триггер, который выполняет нужные вам действия ?

Что лично вам мешает проверить "рабочий ли триггер" ?
Или вы думаете, что от чьего-то "да" триггер вдруг станет рабочим, а от "нет" - нерабочим ?
20 май 13, 22:36    [14323768]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,

меня интересует верный ли код, и может ли он работать. Если бы я сам хорошо разбирался не спрашивал бы.
20 май 13, 22:48    [14323806]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
меня интересует верный ли код

Если вы про _синтаксис_, то сервер просто не позволил вам создать неверный код

Vadim33
и может ли он работать.

Если триггер создан, значит он работает

Vadim33
Если бы я сам хорошо разбирался не спрашивал бы.

Да вы никак не разбираетесь.
20 май 13, 22:54    [14323823]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Vadim33
Glory,

меня интересует верный ли код, и может ли он работать. Если бы я сам хорошо разбирался не спрашивал бы.
Вы хотите, чтобы за вас кто-то сначала угадал структуру, потом создал нужные таблицы, заполнил их тестовыми данными, зафигачил бы туда ваш триггер, угадал, какое у вас клиентское приложение, нашел или создал такое же, выполнил бы неизвестную команду удаления, а потом бы уже сказал бы, работает ваш триггер или нет?

Если вы не в состоянии отладить ваш код, найдите или наймите программиста.
20 май 13, 23:02    [14323861]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
так, домохозяйке на заметку

+
set nocount on
go

use tempdb
go

if object_id('dbo.TriggerTest') is not null drop table dbo.TriggerTest
go
if object_id('dbo.TableThatIllCreate') is not null drop table dbo.TableThatIllCreate
go

create table dbo.TriggerTest(data int not null)
go

create trigger trg_TriggerTest
on dbo.TriggerTest
after insert
as begin
	set nocount on
	declare @i int
	select	@i=count(*) from dbo.NonExistingTable
end
go
select 'Trigger created - but will not work'
go


insert into dbo.TriggerTest(data) values(1)
go

drop trigger dbo.trg_TriggerTest
go
create trigger trg_TriggerTest
on dbo.TriggerTest
after insert
as begin
	set nocount on
	declare @i int
	select	@i=count(*) from 
	(select ColA,Sum(ColB) as Count
	from	dbo.TableThatIllCreate
	group by ColC)S
end
go
select 'Trigger created - but still not works'
go
insert into dbo.TriggerTest(data) values(1)
go
select 'Creating missing table TableThatIllCreate'
go
create table dbo.TableThatIllCreate(cola int,colb int,colc int)
go
select 'Trigger created - but still not works!!!!!'
go
insert into dbo.TriggerTest(data) values(1)
go
20 май 13, 23:38    [14323956]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Гавриленко Сергей Алексеевич,

файл с базой был прикреплён в первом сообщении,поэтому тут нечего гадать. всё,тема закрыта.
21 май 13, 09:14    [14324401]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Vadim33
Гавриленко Сергей Алексеевич,

файл с базой был прикреплён в первом сообщении,поэтому тут нечего гадать. всё,тема закрыта.
Файл с базой вряд ли кто то будет смотреть, это же очевидно :-)

С виду триггер правильный, только учтите замечание насчёт замены print на raiserror.

А для полноценного анализа нужно знать модель данных и бизнес-требования; по любому, даже если кому то захочется разбираться в базе, это потребует много времени и общения с бизнес-пользователями, или знакомство с заданием.
21 май 13, 10:07    [14324662]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
alexeyvg,
спасибо. этого ответа ждал. тема закрыта
21 май 13, 11:15    [14325188]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim33
спасибо. этого ответа ждал. тема закрыта

Четкий пацан
Быстро все скачали базу.
Поставили ее на свой сервер. Если сервер не той версии, то быстро нашли сервер нужной версии.
Быстро разобрали схему данных. (можно прочитать о схеме сразу из мозга ТС)
Быстро поняли задачу (опять же прямой коннект к мозгу)
Переписали триггера.
Запаковали базу и выложили сюда комментариями.
21 май 13, 11:24    [14325244]     Ответить | Цитировать Сообщить модератору
 Re: Верно ли написан триггер  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
С виду триггер правильный

Это только с виду. В многопользовательском окружении он неправильный, т.к. между проверкой наличия записей в Таблице_1 и удалением записей из Таблицы_2, могут появиться новые записи в Таблице_1. Конечно, если целостность данных дополнительно обеспечена foreign key'ями, то можно не считать это проблемой.
21 май 13, 11:56    [14325493]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить