【发布时间】:2017-04-03 14:46:24
【问题描述】:
当数据被插入到这个特定视图中时,我有一个视图从其他视图获取数据,如下所示需要插入表 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 上运行。 提前致谢。
【问题讨论】:
-
每个语句触发一次,而不是每个行触发一次。
inserted可以包含 0、1 或 多个 行。这是此触发器的第一个明显问题。但是,您没有说明您是否收到错误或您如何确定触发器“没有被触发”,因此难以提供进一步的帮助。 -
每个语句的触发是什么意思?我只是编辑问题。
-
表示
inserted表包含所有插入的行。这不是当时的一排。 -
临时将此代码“SELECT (at)Ref = i.ref, (at)EstadoString = i.ESTADO FROM insert i”更改为“SELECT @Ref = convert(nvarchar(50), count( *)) FROM inserted i",您将看到触发器是如何基于 SET 的
-
你可以运行游标,但为什么呢?这只不过是基于单个集合的插入。
标签: sql-server triggers sql-server-2012