sql-server - 有没有办法可以在触发器的 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'
有没有办法在执行插入查询时检索用户的输入?对这些子句进行硬编码并不能帮助我实现我想要实现的目标。
解决方案
不,不是 2 个级别。
- 一,WHERE 子句通常不允许用户交互。SQL 通常没有任何用户交互。
- 触发器是完全反应式的。注入不在不同表中的任何内容的方法为零(您可以在表中进行设置)。这就是他们的做法。
通常,应用层的 UI 会根据需要将 SQL 组合在一起。
推荐阅读
- ssl - 如何在 Windows 10 中安装 OpenSSL?
- jquery - .addClass() 和 .removeClass() 具有动态命名的元素
- list - 如何使用集合减法保留重复项?
- python - 使用 tensorflow-gpu 进行预测比 tensorflow-cpu 慢
- c# - 在 C# 中使用 Dictionary 存储和访问 Xml 元素
- jquery - 如何为每一行设置css边框?
- python - 在 Tkinter 的表格中显示数据的最佳方式是什么?
- c++ - 在 C++/OpenSSL 中存储私钥和证书
- javascript - document.getElementsByClassName('className') 未定义时给出
- ios - swift 4 错误:'-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] 只能从主线程调用