SQL Merge 函数
第一次接触这个函数,贴出来供大家参考下。
ALTER TRIGGER [dbo].[DocumentStatisticsAdd] ON [dbo].[BatchDocument]
FOR INSERT,UPDATE
AS
BEGIN
MERGE INTO DocumentStatistics AS dsTarget
USING (SELECT I.[LastUser],I.[IsBackFromAARTO], BS.BaDoStName,
DoTeName=CASE WHEN dt.DoTeTypeID='TMS_Section341' THEN 'S341'
WHEN dt.DoTeTypeID='TMS_Section56' THEN 'S56'
WHEN dt.DoTeTypeID='TMS_ProvincialSection56' THEN 'ProvincialS56'
ELSE '' END
FROM Inserted I,dbo.BatchDocumentStatus BS,dbo.Batch B,dbo.DocumentTemplate DT
WHERE I.BaDoStID=BS.BaDoStID AND I.BatchID=B.BatchID AND DT.DoTeID=B.DoTeID
AND BS.BaDoStID=2 --BS.BaDoStName='Scanned'
) as dsSource
ON dsTarget.DoStUser = dsSource.LastUser
AND dsTarget.DoStType=dsSource.DoTeName
AND dsTarget.DoStDate=CONVERT(varchar(100), GETDATE(), 112)
AND dsTarget.DoStHour = DATEPART(hh,GETDATE())
WHEN MATCHED
THEN
UPDATE SET dsTarget.DoStScan = dsTarget.DoStScan + 1,dsTarget.DoStLastUpdateDate=GETDATE(),
dsTarget.LastUser=dsTarget.LastUser
WHEN NOT MATCHED
THEN
INSERT(DoStDate,DoStHour,DoStUser,DoStType,DoStScan,DoStEvidence ,DoStCapture,DoStValidate
,DoStQC,DoStExport,DoStFailed,DoStPark,DoStError,DoStCreateDate,DoStLastUpdateDate,LastUser)
VALUES(CONVERT(varchar(100), GETDATE(), 112), DATEPART(hh,GETDATE()),
dsSource.LastUser,dsSource.DoTeName,1,0,0,0,0,0,0,0,0,GETDATE(),GETDATE(),dsSource.LastUser);
END