首页 > 解决方案 > 有没有办法可以在触发器的 WHERE 子句中使用用户的输入?(SQL 服务器)

问题描述

如果不满足条件,我正在尝试创建一个触发器以防止插入。这是我到目前为止所拥有的:

CREATE TRIGGER flightBookingLimit 
ON Booking_Ticket
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS(
SELECT COUNT(Booking_Details.Booking_ID), Passenger_Details.Name, Booking_Details.Flight_No
FROM Booking_Ticket
LEFT JOIN Booking_Details ON Booking_Ticket.Booking_ID = Booking_Details.Booking_ID
LEFT JOIN Passenger_Details ON Booking_Details.Passenger_ID = Passenger_Details.Passenger_ID
LEFT JOIN Flight_Schedule ON Booking_Details.Flight_No = Flight_Schedule.Flight_No
LEFT JOIN Aircraft ON Flight_Schedule.AircraftID = Aircraft.AircraftID
LEFT JOIN Airline ON Aircraft.AirlineID = Airline.AirlineID
WHERE Airline.AirlineName = 'Emirates Airlines'
GROUP BY Passenger_Details.Name, Booking_Details.Flight_No
HAVING COUNT(Booking_Details.Booking_ID) >= 4
)
BEGIN
    PRINT 'This flight only allows a maximum of 4 bookings' 
END
ELSE
    INSERT INTO Booking_Ticket 
    SELECT Booking_ID,Passenger_ID,Flight_No,Reservation_Status,Special_ServiceID,Flight_MealsID,Flight_TripsID,Flight_ClassesID,Ticket_Status,Basic_Fare,Total_Fare
    FROM inserted
END

在 WHERE 子句中,我想做类似的事情:

WHERE Airline.AirlineName = 'Emirates Airlines' AND Passenger_Details.Name = 'Michael Stuart' AND Booking_Details.Flight_No = 'MH101'

有没有办法在执行插入查询时检索用户的输入?对这些子句进行硬编码并不能帮助我实现我想要实现的目标。

标签: sql-servertsqltriggers

解决方案


不,不是 2 个级别。

  • 一,WHERE 子句通常不允许用户交互。SQL 通常没有任何用户交互。
  • 触发器是完全反应式的。注入不在不同表中的任何内容的方法为零(您可以在表中进行设置)。这就是他们的做法。

通常,应用层的 UI 会根据需要将 SQL 组合在一起。


推荐阅读