Sql server 视图上的Sql触发器未被触发

Sql server 视图上的Sql触发器未被触发,sql-server,triggers,sql-server-2012,Sql Server,Triggers,Sql Server 2012,当数据插入到这个特定视图中时,我有一个视图从其他视图获取数据,如下所示,需要插入到表vendas ref(nvarchar(50))和Estado(bool)中 它运行在MS Sql Server 11.0上。 提前谢谢。这里不需要光标。您只需要使用大小写表达式。您发布的触发器可以简化为此。它处理现有代码中任意数量的行和逻辑 ALTER TRIGGER [dbo].[TGR_VENDAS] ON [dbo].[VendasFinal] INSTEAD OF INSERT AS BEGIN

当数据插入到这个特定视图中时,我有一个视图从其他视图获取数据,如下所示,需要插入到表vendas ref(nvarchar(50))和Estado(bool)中

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

这里不需要光标。您只需要使用大小写表达式。您发布的触发器可以简化为此。它处理现有代码中任意数量的行和逻辑

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

触发器每语句触发一次,而不是每行触发一次<代码>插入的可以包含0、1或多行。这是这个触发器的第一个明显问题。但是,您没有说明是否出现错误,或者您如何确定触发器“未被触发”,因此很难提供进一步的帮助。每个语句触发是什么意思?我只是编辑了这个问题。这意味着
inserted
table包含了插入的所有行。暂时将此代码“SELECT(at)Ref=i.Ref,(at)EstadoString=i.ESTADO FROM inserted i”更改为“SELECT@Ref=convert(nvarchar(50),count(*))FROM inserted i”,您将看到触发器是如何设置的。您可以运行光标,但为什么?这只是一个基于集合的插入。
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