У меня есть немного странная проблема с моим SQL-скриптом, и я надеялся, что кто-то сможет мне помочь.Работа с триггером SQL Server назад
У меня есть база данных создается с помощью
IF EXISTS (SELECT name
FROM sysdatabases
WHERE name = 'travel')
DROP DATABASE travel
GO
CREATE DATABASE travel
GO
USE travel
GO
затем создать 3 таблицы, как показано ниже
CREATE TABLE customer
(
customerID INT,
lastname VARCHAR(70) NOT NULL,
firstname VARCHAR(70) NOT NULL,
phone VARCHAR(10) CONSTRAINT phoneCheck CHECK ((phone LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
category VARCHAR(7) NOT NULL CONSTRAINT categoryDefault DEFAULT 'A',
CONSTRAINT categoryCheck CHECK (category IN ('A', 'B', 'C')),
CONSTRAINT customerPK
PRIMARY KEY (customerID)
)
CREATE TABLE package /*Still need to do the Zero Padding*/
(
packageCode VARCHAR(6),
destination VARCHAR(70),
CONSTRAINT packageCodeCheck CHECK (packageCode LIKE ('YFK%')),
price MONEY NOT NULL CONSTRAINT priceCheck CHECK ((price BETWEEN 1000 AND 10000)),
passportRequired VARCHAR(7) NOT NULL CONSTRAINT passportRequiredDefault DEFAULT 'Y',
CONSTRAINT passportCheck CHECK (passportRequired IN ('Y', 'N')),
CONSTRAINT packagePK
PRIMARY KEY (packageCode)
)
CREATE TABLE booking /*Still need to do the Customer and Package delete*/
(
customerID VARCHAR(6),
bookingDate VARCHAR(70) NOT NULL DEFAULT GETDATE(),
amountPaid MONEY CONSTRAINT amountPaidDefault DEFAULT 0.00,
CONSTRAINT bookingPK
PRIMARY KEY (customerID)
)
Теперь ЭРВО этот вопрос, я создать триггер, как показано ниже
GO
CREATE TRIGGER customerDelete ON customer AFTER DELETE
AS
DELETE booking
FROM customer
WHERE customer.customerID = booking.customerID
GO
Какой, по моему мнению, он удалит все записи при бронировании ... которые имеют соответствующий идентификатор клиента W HEN запись удаляется из таблицы клиентов. (Я новичок в триггеры)
I ВСТАВИТЬ образца данных, как показано ниже
INSERT INTO customer
(customerID, lastname, firstname, phone, category)
VALUES
(1, 'Picard', 'Corey', 1234567890, 'A'),
(2, 'Bond', 'Devon',, 'B'),
(3, 'Douglas', 'Bryan', 6549871230, 'C')
INSERT INTO package
(packageCode, destination, price, passportRequired)
VALUES
('YFK001', 'Toronto', 1000.57, 'N'),
('YFK002', 'Orlando', 3000.98, 'Y')
INSERT INTO booking
(customerID, bookingDate, amountPaid)
VALUES
(1, GETDATE(), 1548),
(2, GETDATE(), 1586),
(3, GETDATE(), 1350),
(4, GETDATE(), 1650)
И, наконец, я удалить клиента из таблицы клиентов с CUSTOMERID 1 с помощью
DELETE customer
WHERE customerID = 1
Однако , когда я пытаюсь увидеть результаты с помощью
SELECT * FROM customer
--WHERE customerID = 1 OR customerID = 2 OR customerID = 3
SELECT * FROM package
--WHERE packageCode = 'YFK001' OR packageCode = 'YFK002'
SELECT * FROM booking
--WHERE customerID = 1 OR customerID = 2 OR customerID = 3 OR customerID = 4
Он отображает заказы с custo merID 1 и 4.
Можете ли вы сообщить мне, что я делаю неправильно?
Спусковой в основном используется с целью удаления заказов с тем же CUSTOMERID заказчика мы удалим из таблицы клиентов
Все помощь очень ценится.
Спасибо, Bryan
'delete' синтаксис' удалить из tablename'. у вас есть «удалить заказ от клиента». так что вы не удаляетесь из своей таблицы бронирования вообще. вы пытаетесь сделать незаконное удаление в таблице клиентов. –
Вы пробовали ключи с каскадом во время создания таблицы – Ashish
Я заметил, что основным ключом для таблицы бронирования является 'customerID'. Это означает, что у каждого клиента может быть только одно бронирование в таблице. Вы уверены, что это то, что вы намерены? –