0
挿入または更新が実行されるたびにテーブルBにアップサートするトリガーをテーブルAに追加しようとしています。私はこれを達成するためにMERGEを使用しています。テーブルAのトリガーがテーブルBへのマージ(Upsert)
このデータベースはSQL Server 2008 R2で実行されています。ここで
は私のスクリプトです:私はこのトリガーを適用しようとすると
USE [XMPie]
GO
/****** Object: Trigger [dbo].[tr_targetupd40836-09] Script Date: 5/25/2017 10:18:30 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[tr_targetupd40872-01a]
ON [dbo].[40872-01]
after update, insert as
DECLARE @CJ int, @BPID int, @Email varchar(100)
IF (SELECT TOP 1 OptOut FROM inserted) = 1
BEGIN
SELECT top 1 @CJ = CAST([MicrositeNumber] AS int) FROM inserted
SELECT TOP 1 @BPID = bp.BPID
FROM JandLreporting.dbo.ControlJob cj
INNER JOIN JandLreporting.dbo.BusinessPartner bp
ON cj.JLMReferenceID = bp.JLMReferenceID
WHERE cj.ControlJob = @CJ
SELECT top 1 @Email = RTRIM(LTRIM(Email)) FROM inserted
IF @BPID IS NOT NULL AND NOT EXISTS (SELECT * FROM [DoNotContactEmail] where Email = @Email and BPID = @BPID)
INSERT [DoNotContactEmail](email, bpid) VALUES(@Email, @BPID)
END
ELSE
BEGIN
MERGE JandLreporting.dbo.MicrositeResponseAdor AS T
USING inserted AS S
ON T.RecipientKey = S.RecipientKey
WHEN MATCHED THEN
UPDATE set T.[MicrositeResponse_ID]= (s.[MicrositeResponse_ID])
,T.[MicrositeNumber]=LEFT(s.[MicrositeNumber],50)
,T.[RecipientKey]=LEFT(s.[RecipientKey],101)
,T.[Vin]=LEFT(s.[Vin],30)
,T.[FirstName]=LEFT(s.[FirstName],50)
,T.[MiddleInitial]=LEFT(s.[MiddleInitial],1)
,T.[LastName]=LEFT(s.[LastName],50)
,T.[FullName]=LEFT(s.[FullName],100)
,T.[Address1]=LEFT(s.[Address1],100)
,T.[Address2]=LEFT(s.[Address2],50)
,T.[City]=LEFT(s.[City],50)
,T.[State]=LEFT(s.[State],2)
,T.[ZipCode]=LEFT(s.[ZipCode],10)
,T.[PhoneNumber]=LEFT(s.[PhoneNumber],15)
WHEN NOT MATCHED THEN
INSERT (T.[ID]
,T.[MicrositeResponse_ID]
,T.[MicrositeNumber]
,T.[RecipientKey]
,T.[Vin]
,T.[FirstName]
,T.[MiddleInitial]
,T.[LastName]
,T.[FullName]
,T.[Address1]
,T.[Address2]
,T.[City]
,T.[State]
,T.[ZipCode]
,T.[PhoneNumber]
)
VALUES (s.[ID]
,s.[MicrositeResponse_ID]
,s.[MicrositeNumber]
,s.[RecipientKey]
,s.[Vin]
,s.[FirstName]
,s.[MiddleInitial]
,s.[LastName]
,s.[FullName]
,s.[Address1]
,s.[Address2]
,s.[City]
,s.[State]
,s.[ZipCode]
,s.[PhoneNumber])
END
GO
、私は次のエラーを取得する:構文エラーがある場合
Msg 102, Level 15, State 1, Procedure tr_targetupd40872-01a, Line 26 [Batch Start Line 9]
Incorrect syntax near ' '.
は私が把握することはできません。どんな助けもありがとう!
'BEGIN' /' END'でコードをラップし、それが問題を修正するかどうかを確認します。 –
どこから始めるべきですか?トリガーを作成する前に? – jkruer01
'beginとしてbeginとendを挿入します。 – artm