SQL 预订机票的程序

SQL Procedure for booking flights

我是 SQL 的新手,我有一项任务需要创建一个程序来获取客户 ID 和日历 ID,并将预订插入预订 table 如果尚未达到座位限制。我知道这是非常基本的,但我希望它没问题。 我整天都在谷歌搜索,当我认为我找到了一些东西时,它对我不起作用,因为我无法正确应用它。

table 看起来像这样:

Customer 
(
    ID              INT IDENTITY(1,1) PRIMARY KEY,
    Firstname       VARCHAR(15) NOT NULL,
    Lastname        VARCHAR(20) NOT NULL,
    Email           VARCHAR(50),
    Phonenumber     CHAR(12),
)

Calendar 
(
    ID              INT IDENTITY(1,1) PRIMARY KEY,
    Departure       SMALLDATETIME NOT NULL,
    Arrival         SMALLDATETIME NOT NULL,
    Departing_from  VARCHAR(10) NOT NULL,
    Arriving_to     VARCHAR(10) NOT NULL,
    Seats           INT NOT NULL
)

Booking  
(
    ID              INT IDENTITY(1,1) PRIMARY KEY,
    Booking_date    SMALLDATETIME NOT NULL,
    Cu_ID           INT FOREIGN KEY REFERENCES Customer(ID),
    Ca_ID           INT FOREIGN KEY REFERENCES Calendar(ID)
)

我试过这个程序,但出现语法错误

CREATE PROCEDURE booking_proc1
AS
    DECLARE @Booked_Seats INT
    DECLARE @smalldatetime smalldatetime

    SET @Booked_Seats = 0
BEGIN
    INSERT INTO Booking
        SELECT
            CASE
                WHEN @Booked_Seats < 5 
                    THEN (@smalldatetime, ID FROM Customer 
                          WHERE ID = 1, 
                          ID FROM Calendar WHERE ID = 1)
                ELSE 'Flight is full'
            END;

exec booking_proc1

试试这个:

/*
Example:

Seats Limit = 20
Bookin Date = '06/15/2021'
CustomerID  = 1
CalendarID  = 55

Call it like this:

EXEC dbo.usp_Booking_Insert 20 '06/15/2021', 1, 55

*/


    CREATE PROCEDURE dbo.usp_Booking_Insert
            @SeatsLimit     int 
        ,   @BookingDate    datetime
        ,   @CustomerID     int
        ,   @CalendarID     int
    
        AS
            BEGIN
                SET NOCOUNT ON;
    
                DECLARE @SeatsBooked int = (SELECT SUM(Seats) FROM @Calendar WHERE ID = @CalendarID)
    
                IF  @SeatsLimit > @SeatsBooked
                    BEGIN
                        INSERT INTO @Booking    VALUES (@BookingDate, @CustomerID, @CalendarID);
                    END
                ;
            END
    GO