sql - 触发sql问题
问题描述
需要运行一个触发器来更新我的客户表中的列。这个想法是,一旦更新了客户表,触发器就需要使用标量更新不同的列。标量由函数计算。我不知道问题出在哪里,但出了点问题。
create FUNCTION calculateVirtualCashForCustomer(@email varchar)
RETURNS float
AS BEGIN
DECLARE @virtualCashToAdd float
select @virtualCashToAdd= (B.Price*(cast(O.Quantity as float)))*0.1
from CUSTOMERS AS C JOIN BOXES AS B ON C.Email = B.Email JOIN ORDERS AS O ON O.BoxID = B.BoxID
where C.Email = @email
RETURN @virtualCashToAdd
End
CREATE TRIGGER updateVirtualCash
on CUSTOMERS
AFTER UPDATE
AS
DECLARE @Mail varchar(50)
begin
update CUSTOMERS
set [Virtual Cash] = [Virtual Cash] + (dbo.calculateVirtualCashForCustomer(@Mail))
where @Mail= (select Email from dbo.Top10byMoney)
end
解决方案
我认为问题在于where @Mail= (select Email from dbo.Top10byMoney)
触发器。您可以尝试添加top 1
,select
以便仅与选定的值进行比较
例子:
CREATE TRIGGER updateVirtualCash
on CUSTOMERS
AFTER UPDATE
AS
DECLARE @Mail varchar(50)
SET @Mail= (select Email from dbo.Top10byMoney)
begin
update CUSTOMERS
set [Virtual Cash] = [Virtual Cash] + (dbo.calculateVirtualCashForCustomer(@Mail))
where Email=@Mail
end
为了解决值空问题,您可以使用 ISNULL
set [Virtual Cash] = ISNULL([Virtual Cash],0) + ISNULL(dbo.calculateVirtualCashForCustomer(@Mail),0)
推荐阅读
- c# - 如何制作一个针对 macOS 的可执行文件,这是用 c# 编写的简单控制台应用程序?
- c# - C# 反射,从 MethodInfo.Invoke 获取 ref 返回类型
- html - Xquery、Javascript 和 HTML
- android - 在 Android 后台通知到达时增加通知量
- ansible - 有没有一种方法可以将 Ansible 断言函数与 YAML 文件中的项目而不是列表进行比较?
- java - JGit 抛出 org.eclipse.jgit.errors.MissingObjectException
- python - 导入简单的变压器
- json - 在 Windows 中使用 CURL 调用 Check_MK Web API 时“缺少必需的密钥”
- asp.net-mvc - 在 Chrome 上单击“提交”按钮时操作方法会触发两次
- c# - 如何同时调用Windows服务中的两个方法C#