Главная / Базы данных /
Основы SQL / Тест 15
Основы SQL - тест 15
Упражнение 1:
Номер 1
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для вставки новой записи, причем, когда начальное событие не равно "1", необходимо отменить ввод, если конечное событие еще не было введено как начальное.
CREATE TRIGGER trig_ins
ON Граф FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF NOT EXISTS(
SELECT * FROM inserted WHERE нач_соб=1)
IF NOT EXISTS(SELECT * FROM Граф
WHERE кон_соб=ALL(
SELECT нач_соб FROM inserted))
ROLLBACK TRAN 
 (2) IF NOT EXISTS(
SELECT * FROM inserted WHERE нач_соб=1) AND
NOT EXISTS(SELECT * FROM Граф
WHERE кон_соб=ALL(
SELECT нач_соб FROM inserted))
ROLLBACK TRAN 
 (3) IF NOT EXISTS(
SELECT * FROM inserted WHERE нач_соб=1))
IF NOT EXISTS(SELECT * FROM Граф
WHERE кон_соб=(
SELECT нач_соб FROM inserted)
ROLLBACK TRAN 
 (4) IF NOT EXISTS(
SELECT * FROM inserted WHERE нач_соб=1) AND
NOT EXISTS(SELECT * FROM Граф
WHERE кон_соб= inserted.нач_соб)
ROLLBACK TRAN 
Номер 2
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для вставки новой записи, причем необходимо отменить ввод, если номер конечного события оказался меньше номера начального события.
CREATE TRIGGER trig_ins
ON Граф FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF EXISTS(SELECT * FROM inserted
WHERE нач_соб>кон_соб)
ROLLBACK TRAN 
 (2) IF (SELECT * FROM inserted
WHERE нач_соб>кон_соб)
ROLLBACK TRAN 
 (3) IF inserted.нач_соб>inserted.кон_соб)
ROLLBACK TRAN 
 (4) IF NOT EXISTS(SELECT * FROM inserted
WHERE нач_соб<=кон_соб)
ROLLBACK TRAN 
Номер 3
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для вставки новой записи, причем необходимо отменить ввод, если номер начального события оказался меньше номера хотя бы одного конечного события, введенного ранее.
CREATE TRIGGER trig_ins
ON Граф FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e INT
SELECT @e=нач_соб FROM inserted
IF EXISTS(SELECT * FROM Граф WHERE кон_соб>@e)
ROLLBACK TRAN 
 (2) IF EXISTS(SELECT * FROM Граф
WHERE кон_соб>ANY(SELECT @e=нач_соб
FROM inserted)
ROLLBACK TRAN 
 (3) IF EXISTS(SELECT * FROM Граф
WHERE кон_соб>(SELECT @e=нач_соб
FROM inserted)
ROLLBACK TRAN 
 (4) DECLARE @e INT
SELECT @e=нач_соб FROM inserted
IF NOT EXISTS(SELECT * FROM Граф
WHERE кон_соб<@e)
ROLLBACK TRAN 
Номер 4
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для вставки новой записи, причем необходимо отменить ввод параллельной работы.
CREATE TRIGGER trig_ins
ON Граф FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN 
 (2) IF EXISTS(SELECT *
FROM Граф
WHERE номер<> inserted.номер AND
нач_соб= inserted.нач_соб
AND кон_соб= inserted.кон_соб)
ROLLBACK TRAN 
 (3) IF EXISTS(SELECT *
FROM Граф
WHERE номер<>(
SELECT номер FROM inserted)
AND нач_соб= (
SELECT нач_соб FROM inserted)
AND кон_соб=(
SELECT кон_соб FROM inserted)
ROLLBACK TRAN 
 (4) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер=@n AND
нач_соб<>@e1 AND кон_соб<>@e2 )
ROLLBACK TRAN 
Упражнение 2:
Номер 1
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для удаления работы, причем необходимо отменить удаление, если только эта работа и никакая другая приводит к данному конечному событию.
CREATE TRIGGER trig_del
ON Граф FOR DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND кон_соб=@e )
ROLLBACK TRAN 
 (2) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF EXISTS(SELECT *
FROM Граф
WHERE кон_соб<>@e )
ROLLBACK TRAN 
 (3) IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>deleted.номер AND
кон_соб=deleted.кон_соб )
ROLLBACK TRAN 
 (4) IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<> (SELECT номер FROM deleted)
AND кон_соб=(SELECT кон_соб FROM deleted))
ROLLBACK TRAN 
Номер 2
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для удаления работы, причем необходимо отменить удаление, если работа оказалась единственной, выходящей из данного события.
CREATE TRIGGER trig_del
ON Граф FOR DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e INT,@n INT
SELECT @n=номер, @e=нач_соб FROM deleted
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND нач_соб=@e )
ROLLBACK TRAN 
 (2) DECLARE @e INT,@n INT
SELECT @n=номер, @e=нач_соб FROM deleted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND нач_соб<>@e )
ROLLBACK TRAN 
 (3) IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>deleted.номер AND
нач_соб=deleted.нач_соб )
ROLLBACK TRAN 
 (4) IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<> (SELECT номер FROM deleted)
AND нач_соб=(SELECT нач_соб FROM deleted))
ROLLBACK TRAN 
Номер 3
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для удаления работы, причем при попытке удаления единственной работы, приводящей к данному конечному событию, отменить удаление, заменив в удаляемой работе начальное событие на исток (т.е. на начальное событие под номером 1).
CREATE TRIGGER trig_del
ON Граф INSTEAD OF DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF NOT EXISTS(SELECT * FROM Граф
WHERE номер<>@n AND кон_соб=@e )
UPDATE Граф SET нач_соб=1 WHERE номер=@n
ELSE
DELETE FROM Граф WHERE номер=@n 
 (2) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF EXISTS(SELECT * FROM Граф
WHERE номер<>@n AND кон_соб<>@e )
UPDATE Граф SET нач_соб=1 WHERE номер=@n
ELSE
DELETE FROM Граф WHERE @e=кон_соб 
 (3) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF NOT EXISTS(SELECT * FROM Граф
WHERE номер<>@n AND кон_соб=@e )
UPDATE Граф SET нач_соб=1 WHERE кон_соб=@e
ELSE
DELETE FROM Граф WHERE кон_соб=@e 
 (4) DECLARE @e INT,@n INT
SELECT @n=номер, @e=кон_соб FROM deleted
IF номер<>@n AND кон_соб=@e
UPDATE Граф SET нач_соб=1 WHERE номер=@n
ELSE
DELETE FROM Граф WHERE номер=@n 
Номер 4
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Разработать триггер для удаления работы, причем при попытке удаления единственной работы, выходящей из данного начального события, отменить удаление, заменив в удаляемой работе конечное событие на сток (т.е. на конечное событие с максимальным номером).
CREATE TRIGGER trig_del
ON Граф INSTEAD OF DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e INT,@n INT, @m INT
SELECT @n=номер, @e=нач_соб FROM deleted
SELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@n
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND нач_соб=@e )
UPDATE Граф SET кон_соб=@m WHERE номер=@n
ELSE
DELETE FROM Граф WHERE номер=@n 
 (2) DECLARE @e INT,@n INT, @m INT
SELECT @n=номер, @e=нач_соб FROM deleted
SELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@n
IF NOT EXISTS(SELECT *
FROM Граф
WHERE нач_соб=@e )
UPDATE Граф SET кон_соб=@m WHERE номер=@n
ELSE
DELETE FROM Граф WHERE номер=@n 
 (3) DECLARE @e INT,@n INT, @m INT
SELECT @n=номер, @e=нач_соб FROM deleted
SELECT @m=MAX(кон_соб) FROM Граф
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND нач_соб=@e )
UPDATE Граф SET кон_соб=@m WHERE номер=@n
ELSE
DELETE FROM Граф WHERE номер=@n 
 (4) DECLARE @e INT,@n INT, @m INT
SELECT @n=номер, @e=нач_соб FROM deleted
SELECT @m=MAX(кон_соб) FROM Граф WHERE номер<>@n
IF NOT EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND нач_соб=@e )
UPDATE Граф SET кон_соб=@m WHERE нач_соб=@e
ELSE
DELETE FROM Граф WHERE нач_соб=@e 
Упражнение 3:
Номер 1
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Запретить одновременное изменение только номеров начального и конечного событий.
CREATE TRIGGER trig_upd
ON Граф FOR UPDATE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF (COLUMNS_UPDATED() & 6)=6
ROLLBACK TRAN 
 (2) IF UPDATE(нач_соб) AND UPDATE(кон_соб)
ROLLBACK TRAN 
 (3) IF UPDATE(нач_соб,кон_соб)
ROLLBACK TRAN 
 (4) IF (COLUMNS_UPDATED() & 2)=2
ROLLBACK TRAN 
Номер 2
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Запретить одновременное изменение номеров начального и конечного событий и длительности.
CREATE TRIGGER trig_upd
ON Граф FOR UPDATE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF (COLUMNS_UPDATED() & 14)=14
ROLLBACK TRAN 
 (2) IF (нач_соб) AND
UPDATE(кон_соб) AND UPDATE(длит)
ROLLBACK TRAN 
 (3) IF UPDATE(нач_соб AND кон_соб AND длит)
ROLLBACK TRAN 
 (4) IF (COLUMNS_UPDATED() & 15)=15
ROLLBACK TRAN 
Номер 3
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Если изменяется только номер конечного события и это изменение приводит к появлению параллельной работы, отменить изменение.
CREATE TRIGGER trig_upd
ON Граф FOR UPDATE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF (COLUMNS_UPDATED() ^ 4)=4
BEGIN
DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN
END 
 (2) IF UPDATE(кон_соб)
BEGIN
DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN
END 
 (3) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF UPDATE(кон_соб)
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN 
 (4) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @e1=нач_соб, @e2=кон_соб
FROM inserted
IF (COLUMNS_UPDATED() & 4)=4
IF EXISTS(SELECT *
FROM Граф
WHERE нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN 
Номер 4
В таблице Граф представлен график сетевого планирования:
CREATE TABLE Граф
(номер INT PRIMARY KEY, --номер работы
нач_соб INT, --начальное событие
кон_соб INT, --конечное событие
длит INT) --длительность работы
В таблице, моделирующей сетевой график, каждая запись соответствует некоторой работе, связывающей два события: начальное и конечное.
Например:
Номер | Нач_соб | Кон_соб | Длит |
---|
1
2
3
4
5
6
7
8
9
10 | 1
1
1
3
4
3
2
5
5
6 | 2
4
3
4
5
5
6
6
7
7 | 5
12
3
6
2
8
5
4
7
2 |
Реализуем в виде триггеров ряд правил для обеспечения целостности данных в подобной сетевой структуре. Начальное событие графика (исток) обозначено цифрой "1".
Если изменяется только номер начального события и это изменение приводит к появлению параллельной работы, отменить изменение.
CREATE TRIGGER trig_upd
ON Граф FOR UPDATE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) IF (COLUMNS_UPDATED() )=2
BEGIN
DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN
END 
 (2) IF UPDATE(нач_соб)
BEGIN
DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=номер, @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE номер<>@n AND
нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN
END 
 (3) IF (COLUMNS_UPDATED() & 2)=2
DECLARE @e1 INT, @e2 INT,@n INT
SELECT @e1=нач_соб, @e2=кон_соб
FROM inserted
IF EXISTS(SELECT *
FROM Граф
WHERE нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN 
 (4) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @e1=нач_соб, @e2=кон_соб
FROM inserted
IF UPDATE(нач_соб)
IF EXISTS(SELECT *
FROM Граф
WHERE нач_соб=@e1 AND кон_соб=@e2 )
ROLLBACK TRAN 
Упражнение 4:
Номер 1
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
-- в которую дуга входит
Создать триггер, обрабатывающий вставку одной записи и запрещающий ввод параллельных дуг.
CREATE TRIGGER trig
ON graph FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF EXISTS(SELECT *
FROM graph
WHERE nomer<>@n AND
outp=@e1 AND inp=@e2 )
ROLLBACK TRAN 
 (2) IF EXISTS(SELECT *
FROM graph
WHERE nomer<> inserted.nomer AND
outp= inserted.outp
AND inp= inserted.inp)
ROLLBACK TRAN 
 (3) IF EXISTS(SELECT *
FROM graph
WHERE nomer<>(SELECT nomer FROM inserted)
AND outp= (SELECT outp FROM inserted)
AND inp=(SELECT inp FROM inserted)
ROLLBACK TRAN 
 (4) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF NOT EXISTS(SELECT *
FROM graph
WHERE nomer=@n AND
outp<>@e1 AND inp<>@e2 )
ROLLBACK TRAN 
Номер 2
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
--в которую дуга входит
Создать триггер, обрабатывающий вставку одной записи и запрещающий ввод дуги, если в соответствующую вершину уже входят 3 дуги.
CREATE TRIGGER trig
ON graph FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
SELECT @k=COUNT(inp)
FROM graph
WHERE inp=@e2
IF @k>3
ROLLBACK 
 (2) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF COUNT(outp)>=3
ROLLBACK 
 (3) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF (SELECT COUNT(inp)
FROM graph
WHERE inp=@e1)>=3
ROLLBACK 
 (4) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF (COUNT(inp)
FROM graph
WHERE inp=@e1)>=3
ROLLBACK 
Номер 3
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
--в которую дуга входит
Создать триггер, обрабатывающий вставку одной записи и запрещающий ввод дуги, если из соответствующей вершины уже выходят 3 дуги.
CREATE TRIGGER trig
ON graph FOR INSERT
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
SELECT @k=COUNT(outp)
FROM graph
WHERE outp=@e1
IF @k>3
ROLLBACK 
 (2) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF COUNT(outp)>3
ROLLBACK 
 (3) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF (SELECT COUNT(outp)
FROM graph
WHERE outp=@e2)>3
ROLLBACK 
 (4) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM inserted
IF (COUNT(outp)
FROM graph
WHERE outp=@e2)>3
ROLLBACK 
Упражнение 5:
Номер 1
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
--в которую дуга входит
Создать триггер, обрабатывающий удаление одной дуги, причем следует запретить удаление, если эта дуга единственная, входящая в некоторую вершину.
CREATE TRIGGER trig
ON graph FOR DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
SELECT @k=COUNT(inp)
FROM graph
WHERE inp=@e2
IF @k=0
ROLLBACK 
 (2) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF COUNT(inp)=0
ROLLBACK 
 (3) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF (SELECT COUNT(outp)
FROM graph
WHERE outp=@e2)=1
ROLLBACK 
 (4) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF (COUNT(inp)
FROM graph
WHERE outp=@e1)=1 
Номер 2
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
--в которую дуга входит
Создать триггер, обрабатывающий удаление одной дуги, причем следует запретить удаление, если эта дуга единственная, связывающая некоторые вершины.
CREATE TRIGGER trig
ON graph FOR DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF NOT EXISTS(SELECT *
FROM graph
WHERE nomer<>@n AND
outp=@e1 AND inp=@e2 )
ROLLBACK TRAN 
 (2) IF NOT EXISTS(SELECT *
FROM graph
WHERE nomer<> deleted.nomer AND
outp= deleted.outp
AND outp= deleted.inp)
ROLLBACK TRAN 
 (3) IF NOT EXISTS(SELECT *
FROM graph
WHERE nomer<>(SELECT nomer FROM deleted)
AND outp= (SELECT outp FROM deleted)
AND inp)
ROLLBACK TRAN 
 (4) DECLARE @e1 INT, @e2 INT,@n INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF EXISTS(SELECT *
FROM graph
WHERE nomer=@n AND
outp<>@e1 AND inp<>@e2 )
ROLLBACK TRAN 
Номер 3
Дана таблица со структурой, которая описывает некоторый граф:
CREATE TABLE graph
(nomer INT PRIMARY KEY, --номер дуги
outp INT, --номер вершины,
--из которой дуга выходит
inp INT) --номер вершины,
--в которую дуга входит
Создать триггер, обрабатывающий удаление одной дуги, причем следует запретить удаление, если эта дуга единственная, выходящая из некоторой вершины.
CREATE TRIGGER trig
ON graph FOR DELETE
AS
Выберите операторы для продолжения текста триггера.
Ответ:
 (1) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
SELECT @k=COUNT(outp)
FROM graph
WHERE outp=@e1
IF @k=1
ROLLBACK 
 (2) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF COUNT(outp)=1
ROLLBACK 
 (3) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF (SELECT COUNT(inp)
FROM graph
WHERE inp=@e1)=1
ROLLBACK 
 (4) DECLARE @e1 INT, @e2 INT,@n INT,@k INT
SELECT @n=nomer, @e1=outp, @e2=inp
FROM deleted
IF (COUNT(outp)
FROM graph
WHERE outp=@e1)=1
ROLLBACK