以下循环根据同一表中的其他记录的存在情况有条件地设置@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