视图上的Sql触发器不会被触发

时间:2017-04-03 14:46:24

标签: sql-server triggers sql-server-2012

我有一个视图,当数据插入此特定视图时从其他视图获取数据,因为show bellow需要插入表vendas ref(nvarchar(50))和Estado(bool)。

ALTER TRIGGER [dbo].[TGR_VENDAS] 
ON [dbo].[VendasFinal]
INSTEAD OF INSERT
AS
BEGIN
    DECLARE
    @Ref  nvarchar(50),
@EstadoString nvarchar(50)

SELECT @Ref = i.ref, @EstadoString = i.ESTADO 
FROM inserted i

if(@EstadoString = 'Em Aberto')
    BEGIN
        INSERT INTO dbo.Vendas
            (ref, Estado)
        VALUES
            (@Ref ,0);
    END
ELSE
    BEGIN
        INSERT INTO dbo.Vendas
            (ref, Estado)
        VALUES
            (@Ref ,1);
    END
END

它在MS Sql Server 11.0上运行。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你不需要光标。您只需要使用案例表达式。您发布的触发器可以简化为此。它处理任意数量的行以及现有代码中的逻辑。

ALTER TRIGGER [dbo].[TGR_VENDAS] 
ON [dbo].[VendasFinal]
INSTEAD OF INSERT
AS
BEGIN

     INSERT INTO dbo.Vendas
    (
        ref
        , Estado
    )
    SELECT i.ref
        , case when i.ESTADO = 'Em Aberto' then 0 else 1 end
    from inserted i