以下循環根據同一表中的其他記錄的存在情況有條件地設置@EndDate。基本上,如果給定ReferenceTypeId和每個PersonId,KeepId和RemoveId至少存在一條記錄,我們只想將當前日期分配給@EndDate。不帶遊標的更新語句中的條件集
如何在沒有循環的情況下編寫此Update語句。
DECLARE ReferenceType_Cursor CURSOR FOR
SELECT ID FROM CORE.PersonExternalReferenceType
OPEN ReferenceType_Cursor
FETCH NEXT FROM ReferenceType_Cursor INTO @RefTypeId
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ENDDATE = NULL
IF(EXISTS (SELECT 1 FROM CORE.PersonExternalReferences WHERE ReferenceTypeId = @RefTypeId AND PersonId = @KeepId) AND
EXISTS (SELECT 1 FROM CORE.PersonExternalReferences WHERE ReferenceTypeId = @RefTypeId AND PersonId = @RemoveId))
BEGIN
SET @ENDDATE = @CURRENTDATE
END
UPDATE CORE.PersonExternalReferences
SET
PersonId = @KeepID,
ModifiedBy = @USERNAME,
ModifiedDate = @CURRENTDATE,
StartDate = COALESCE(StartDate,CreatedDate,@STARTDATE),
EndDate = @ENDDATE
WHERE ReferenceTypeId = @RefTypeId AND PersonId = @RemoveID
FETCH NEXT FROM ReferenceType_Cursor INTO @RefTypeId
END
CLOSE ReferenceType_Cursor
DEALLOCATE ReferenceType_Cursor
我仍然需要遍歷所有ReferenceTypeIds – navig8tr