我正在尝试创建一个简单的触发器,并使用SQL Server Management Studio提供的模板。我已经进行了广泛的搜索,但找不到解决方案。我为一些葡萄牙语文本道歉,但数据库是用同一种语言。
CREATE TRIGGER dbo.UA_TRIGGER_PAGAMENTO
ON dbo.PagamentoSet
AFTER UPDATE
AS
DECLARE @vEstado VARCHAR(20);
DECLARE @vIdSocio INT;
BEGIN
SET NOCOUNT ON;
SET @vEstado = (SELECT Estado FROM inserted);
SET @vIdSocio = (SELECT Socio_Id FROM inserted);
IF (@vEstado = 'PAGO') THEN
UPDATE SocioSet
SET Atualizado = 'True'
WHERE Id = @vIdSocio;
END IF;
END
GO
当我尝试运行它时,我收到以下错误:
Msg 156,Level 15,State 1,Procedure UA_TRIGGER_PAGAMENTO,Line 15 关键字'THEN'附近的语法不正确。
Msg 156,Level 15,State 1,Procedure UA_TRIGGER_PAGAMENTO,Line 23
关键字“END”附近的语法不正确。
我已经尝试在de BEGIN - END中声明变量。试着不要用分号。没别的了。
谢谢
答案 0 :(得分:0)
注意:sql server中的触发器是按语句触发的,而不是每行触发的。这意味着您插入的表可能包含多个值。在这种情况下,您当前的触发器将引发错误(子查询返回的值超过一个值)。
以下是编写触发器的正确方法:
CREATE TRIGGER dbo.UA_TRIGGER_PAGAMENTO
ON dbo.PagamentoSet
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE t
Set Atualizado = 'True'
FROM SocioSet t
INNER JOIN inserted i ON t.Id = i.Socio_Id
WHERE t.Estado = 'PAGO';
END
GO
另外,为了将来参考,在sql中编写if ... else条件的正确方法是
IF condition
BEGIN
-- statements
END
[ELSE
BEGIN
-- statements
END]
答案 1 :(得分:0)
我已经找到了解决方案。删除'THEN'和'END IF'。 https://msdn.microsoft.com/en-us/library/ms182717.aspx