Sql server 我想知道如何将Oracle触发器转换为SQL Server触发器
据我所知,SQL SERVER触发器不支持每一行。另外,我知道您必须使用插入表和删除表。除此之外,我不知道如何编写SQL Server触发器。他们看起来很不一样。能帮点忙吗 下面是Oracle触发器的代码Sql server 我想知道如何将Oracle触发器转换为SQL Server触发器,sql-server,oracle,Sql Server,Oracle,据我所知,SQL SERVER触发器不支持每一行。另外,我知道您必须使用插入表和删除表。除此之外,我不知道如何编写SQL Server触发器。他们看起来很不一样。能帮点忙吗 下面是Oracle触发器的代码 create or replace TRIGGER Ten_Percent_Discount BEFORE INSERT OR UPDATE ON Bookings FOR EACH ROW DECLARE CURSOR C_Passengers IS SELECT StatusN
create or replace TRIGGER Ten_Percent_Discount
BEFORE INSERT OR UPDATE ON Bookings
FOR EACH ROW
DECLARE CURSOR C_Passengers IS
SELECT StatusName
FROM Passengers
WHERE PassengerNumber = :NEW.Passengers_PassengerNumber;
l_status_name Passengers.StatusName%TYPE;
BEGIN
OPEN C_Passengers;
FETCH C_Passengers INTO l_status_name;
CLOSE C_Passengers;
以下是我到目前为止所写的内容。我知道我用错了插入的表
IF l_status_name = 'Regular'
THEN
:New.TotalCost := 0.90 * :New.TotalCost;
END IF;
END;
create TRIGGER Ten_Percent_Discount
ON Customer
FOR INSERT ,UPDATE
AS
DECLARE C_Passengers CURSOR FOR
SELECT StatusLevel
FROM Customer
WHERE CustomerID = inserted.CustomerID
提前谢谢你的帮助
面向客户的表结构
订单的表结构
以下答案仅供参考,可用于逐步构建最终解决方案:
create table dbo.customer
(
customerid varchar(10),
firstname nvarchar(50),
statuslevel varchar(50)
)
go
create table dbo.customerorder
(
orderid varchar(10),
totalprice numeric(5,2),
productid varchar(10),
customerid varchar(10)
)
go
go
create trigger dbo.tr_customer on dbo.customer for insert,update
as
begin
update co
set co.totalprice = .9*co.totalprice
from dbo.customerorder co
inner join inserted i
on co.customerid = i.customerid
where i.statuslevel = 'Standard'
end
go
--test for above code
insert into dbo.customer values (1,'jayesh','')
insert into dbo.customerorder values (1,500.25,1,1)
insert into dbo.customerorder values (1,600.25,2,1)
select * from dbo.customer
select * from dbo.customerorder
update dbo.customer set statuslevel = 'Standard' where customerid = 1
select * from dbo.customer
select * from dbo.customerorder
但我非常确定的是,当第一次创建客户时,将不会有任何订单应用折扣,因此您肯定也需要更新触发器。我可以知道您为什么要在“客户”上编写sql server触发器吗表oracle触发器何时在预订表上?@JayeshPrakash是的,因为它们是不同的表,但触发器的工作逻辑相同。谢谢,你介意在你的问题中发布表格结构和你对插入和删除案例的确切要求吗?@JayeshPrakash你只需要我的表格的屏幕打印吗?截图?触发要求是,如果客户的状态为标准,则我希望触发,这将在订单中提供总价10%的折扣。Creenshot也可以工作,此外,在删除的情况下,触发器应该做什么?如果我要给客户提供5%的折扣,我是否需要添加另一个if语句?您可以在触发器更新中使用case语句。类似于“设置co.totalprice=CASE i.statuslevel当'Standard'时,然后是9当'Regular'时,然后是5否则1结束*co.totalprice”。同样在这种情况下,不要忘记删除where子句。参考啊,干杯,伙计!!我被困在这上面有一段时间了。非常感谢你在正确的道路上给予的帮助。非常感谢@杰耶什