Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在if/else中使用计算列_Sql Server_If Statement_Triggers_Sql Server 2012_Calculated Columns - Fatal编程技术网

Sql server 如何在if/else中使用计算列

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

我的触发器有一个问题:它无法识别存储我需要的数据的计算列的表

我的表如下所示,由多个计算列组成:

我的问题是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_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