이 할 수있는 더 좋은 방법이 될 수 있습니다. TSQL 플래그 중복 레코드가있다
WITH
CTE(TransId, OriginalName, StrippedName, RowNumber)
AS
(
SELECT TransID ,
Name ,
StrippedName,
RN = ROW_NUMBER() OVER (PARTITION BY StrippedName ORDER BY StrippedName)
FROM dbo.Members
)
UPDATE dbo.Members
SET ParenId = TransID
WHERE TransID IN (SELECT TransId FROM CTE WHERE RowNumber = 1)
지금 내가 좋아하는 것
모든 중복 레코드를 업데이트하는 (여기서 ROWNUMBER> 1) 고유 ParentId에 :는 나는이 같은 모든 고유 한 기록을 플래그 테이블이있다. 지금은 작동하는 UDF를 사용하고 있지만 매우 오랜 시간이 걸립니다. 내가 현재 사용하고 업데이트 문 여기
CREATE FUNCTION dbo.getParentTransId (@TransId INT, @strippedBusName VARCHAR(200))
RETURNS INT
AS
BEGIN
DECLARE @ParentTransId INT
SELECT @ParentTransId = TransId
FROM dbo.Members
WHERE StrippedBusName = @strippedBusName
AND ParenId IS NOT NULL
IF @ParentTransId IS NULL
BEGIN
SET @ParentTransId = @TransId
END
RETURN @ParentTransId
END
GO
그리고 :
UPDATE dt
SET dt.ParenId = dbo.getParentTransId (dt.TransID, dt.StrippedBusName)
FROM dbo.Members dt
GO
는 UDF를 사용하지 않고 동일한 업데이트를 할 수있는 방법이 여기에 UDF입니까?
니스! 내가 마지막 업데이트없이 제안 실행하면 더 나은입니다 "AND dt1.ParentId가 NULL이"나는 플래그에 순 방문자를 내 첫 번째 업데이트를 실행할 필요가 없습니다. – mwhib