SQL 스크립트에 약간 이상한 문제가 있습니다. 누군가 나를 도와 줄 수 있기를 바랍니다.SQL 서버 트리거가 뒤로 기능을 수행합니다
GO
CREATE TRIGGER customerDelete ON customer AFTER DELETE
AS
DELETE booking
FROM customer
WHERE customer.customerID = booking.customerID
GO
아래와 같이 heres는 이제
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)
)
문제 아래와 같이
나는 데이터베이스를 가지고는 그때 3 개 테이블을 생성
IF EXISTS (SELECT name
FROM sysdatabases
WHERE name = 'travel')
DROP DATABASE travel
GO
CREATE DATABASE travel
GO
USE travel
GO
를 사용하여 생성되고, 나는 트리거를 작성
내 이해에 따라 예약 된 모든 레코드가 삭제됩니다 ... 일치하는 고객 ID가있는 W HEN 레코드가 고객 테이블에서 삭제됩니다.
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)
아래와 같이 내가 샘플 데이터를 삽입하고 마지막으로 나는 그러나
DELETE customer
WHERE customerID = 1
를 사용하여 하나의 고객 ID와 테이블 고객으로부터 고객을 삭제 (I 트리거하기 위해 새로운 오전) , 사용하여 결과를 볼 때
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
그것은 merID 1과 4.
내가 뭘 잘못하고 있는지 알려주실 수 있습니까?
트리거
은 본질적으로 우리는 고객 TABLE모든 도움에서 삭제 고객의 동일한 고객 ID와 예약을 삭제하는 목적으로 사용되어 대단히 감사합니다.
감사합니다, 브라이언
업데이트됩니다 업데이트하는이 방법은'delete' 구문은 tablename'에서 삭제'이다. '고객으로부터 예약 삭제 '가 있습니다. 그래서 당신은 당신의 예약 테이블에서 전혀 삭제하지 않을 것입니다. 고객 테이블에서 불법적 인 삭제를 시도하고 있습니다. –
테이블을 생성하는 동안 캐스케이드 키를 시도 했습니까? – Ashish
'예약'테이블의 기본 키가 'customerID'인 것으로 나타났습니다. 이는 각 고객이 테이블에 하나의 예약 만 가질 수 있음을 의미합니다. 그게 네가하려는 의도 야? –