単純なトリガを作成しようとしていて、SQL Server Management Studioのテンプレートを使用しました。私はすでに広範な検索を行い、解決策を見つけることができませんでした。私は、ポルトガル語で書かれているテキストについてはお詫びしますが、データベースは同じ言語です。SQL:Msg 156、レベル15、状態1、プロシージャUA_TRIGGER_PAGAMENTO、15行目キーワード 'THEN'の近くの構文が正しくありません
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
私はそれを実行しようとすると、私は次のエラーを取得:
メッセージ156、レベル15、状態1、プロシージャUA_TRIGGER_PAGAMENTO、ライン15
不適切な構文 'を' キーワードの近くには。レベル15、状態1、プロシージャUA_TRIGGER_PAGAMENTO、行23
キーワード 'END'の近くに構文が正しくありません。
私は既にBEGIN-ENDの中で変数を宣言しようとしました。セミコロンを入れないようにしました。そして何も。
はあなたに
[IF ... ELSE](https://msdn.microsoft.com/en-GB/library/ms182717.aspx)(「THEN」キーワードには注意してください)。 [BEGIN ... END](https://msdn.microsoft.com/en-gb/library/ms190487.aspx)(「END IF」ではなく)。あなたのトリガは壊れています - 'inserted'は0、1、または*複数の行を含むことができます。 –
あなたのトリガーには**メジャー**の欠陥があります。**行ごとに** **一度**と呼ばれると思われるようです。トリガは**文ごとに** **起動します。したがって、 'UPDATE'文が25行に影響を与えると、トリガは一度**発生しますが、' Inserted'と 'Deleted'はそれぞれ25行。これらの25行のうち、あなたのコードはここで選択されますか? 'SELECT Estado FROM inserted' - 非決定論的です。これを考慮に入れてトリガーを書き直す必要があります。 –