Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新后使用条件回复触发_Sql Server_Database Trigger - Fatal编程技术网

Sql server 更新后使用条件回复触发

Sql server 更新后使用条件回复触发,sql-server,database-trigger,Sql Server,Database Trigger,我在tblVisitLog上写了一个更新后触发器,当一个特定的字段TimeOUT被更新时,在tblClinicalDoc中插入一条新记录。目标表中可能已经存在具有标识ID(Conference_代码)的记录,因此我为UPDATE或INSERT语句添加了IF EXIST和IF NOT EXISTS 我相信一定有一种比我现有的更优雅、更有效的方式来编写这个触发器。以下是我所拥有的: USE [test_db1] GO SET ANSI_NULLS ON GO SET QUOTED_IDEN

我在tblVisitLog上写了一个更新后触发器,当一个特定的字段TimeOUT被更新时,在tblClinicalDoc中插入一条新记录。目标表中可能已经存在具有标识ID(Conference_代码)的记录,因此我为UPDATE或INSERT语句添加了IF EXIST和IF NOT EXISTS

我相信一定有一种比我现有的更优雅、更有效的方式来编写这个触发器。以下是我所拥有的:

    USE [test_db1]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[CreateRowInClinicalDoc]
ON [dbo].[tblVisitLog]
AFTER UPDATE

AS 
BEGIN
SET NOCOUNT ON;

IF UPDATE(TimeOUT)

IF EXISTS (SELECT c.Encounter_code FROM tblClinicalDoc c
INNER JOIN INSERTED i ON c.Encounter_code = i.Encounter_code
WHERE I.TimeOut IS NOT NULL)


UPDATE tblClinicalDoc
SET EditDate = GetDate()
FROM INSERTED i
INNER JOIN tblClinicalDoc c ON c.Encounter_code = i.Encounter_code
END

BEGIN
SET NOCOUNT ON;

IF NOT EXISTS (SELECT c.Encounter_code FROM tblClinicalDoc c
INNER JOIN INSERTED i ON c.Encounter_code = i.Encounter_code
WHERE I.TimeOut IS NOT NULL)

INSERT INTO tblClinicalDoc 
SELECT DISTINCT v.CaseNumber AS CaseNumber, v.Episode AS Episode, v.Encounter_code AS Encounter_code, v.Provider AS Provider, 
(r.Discipline + '_'+ r.ReportType) AS Note_Type, (r.Discipline + '_' +r.ReportType + ' - ' + v.Case_Name + ' ' + convert(nvarchar(10), 
v.TimeIN, 112)) AS Note_Synopsis,
(UPPER(w.ClientCode) + '_' + v.Discipline + '_' + v.VisitType + '_' + RIGHT('0000000' + CONVERT(VARCHAR,v.Encounter_code), 7)+ '_' + convert(nvarchar(10), v.TimeIN, 112) + '.pdf') AS Document_Name,
GetDate() AS EditDate, v.Provider AS EditBy, '' AS InterfaceDate, '' AS InterfaceAgent, '-2' AS Sent, 0 AS Ack, '' AS Document_ID, '' AS Confired
FROM inserted v
INNER JOIN [WebLoginSelector].[dbo].LookupDatabaseCode w ON DB_NAME() = w.ClientDatabaseCode
INNER JOIN LookupReportTypes r ON v.Discipline = r.Discipline AND v.VisitType = r.VT
WHERE v.TimeOUT IS NOT NULL
END
GO
提前感谢所有回复


JackW9653

您可以使用MERGE语句。参考此链接获取更多信息和示例:感谢@FLICKER的回复。我一直使用触发器,但我尝试合并。