Sql server 如何在if/else中使用计算列
我的触发器有一个问题:它无法识别存储我需要的数据的计算列的表 我的表如下所示,由多个计算列组成: 我的问题是In_Months列,触发器的一部分如下所示:Sql server 如何在if/else中使用计算列,sql-server,if-statement,triggers,sql-server-2012,calculated-columns,Sql Server,If Statement,Triggers,Sql Server 2012,Calculated Columns,我的触发器有一个问题:它无法识别存储我需要的数据的计算列的表 我的表如下所示,由多个计算列组成: 我的问题是In_Months列,触发器的一部分如下所示: CREATE TRIGGER [Balance_monthly] ON [dbo].[Balance] FOR INSERT, UPDATE AS BEGIN DECLARE @test int; DECLARE @amount int; SET NOCOUNT ON IF Balance.In_Month
CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @test int;
DECLARE @amount int;
SET NOCOUNT ON
IF Balance.In_Months % 12 = 0
SET @amount = 3;
它不允许我更新触发器,因为它找不到我的表。使用alter
ALTER TRIGGER [Balance_monthly] ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @test int;
DECLARE @amount int;
SET NOCOUNT ON
IF In_Months % 12 = 0
SET @amount = 3;
这是为了给你指出正确的方向。它没有给出一个有用的答案,只是一个有效的答案。它只是演示了触发器是如何工作的 似乎您要估计正在插入的某些数据。但是,可以插入或更新多行 创建测试表:
CREATE table balance(in_months int)
触发器的创建。我为每行选择3,其中In_月可以除以12
CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @amount int;
SET NOCOUNT ON
SELECT @amount= sum(case when INSERTED.In_Months % 12 = 0 then 3 else 0 end)
FROM INSERTED
SELECT @amount
END
在表中插入以激活触发器:
INSERT balance(In_Months) values(12),(13),(24)
结果是6(3*2),因为插入值中的2个(12和24)可以除以12,SQL Server触发器会在每条语句中触发一次,因此您需要引用
插入的和/或删除的表来访问更改的数据,并且您需要意识到这些表可以包含多行。通常,您编写了一个或多个基于集合的查询,以实现触发器的目标,例如,inserted
可能包含4行,其中2行有Balance.In_月%12=0
,其中2行没有。但是,您还没有告诉我们这个触发器的总体目标是什么,所以我现在不能推荐任何具体的代码。您想实现什么?当In_Month为12,24,36时,是否有一个金额列应设置为3?我想你们理解我的If语句,但因为它不识别我的表,所以无法工作。我担心在这种情况下,此语句无法识别。是的,我识别,但它不允许我更新,因为它找不到我的表SELECT@amount=sum(插入时为case.In_Months%12=0,然后为3,否则为0结束)插入的正是我想要的,我会解决的,无论如何,谢谢你解决了我的问题。
CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @amount int;
SET NOCOUNT ON
SELECT @amount= sum(case when INSERTED.In_Months % 12 = 0 then 3 else 0 end)
FROM INSERTED
SELECT @amount
END