必须有更好的方法来做到这一点。
我有一个表,我标记了所有唯一记录,如下所示:
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,它可以工作,但需要很长时间。这是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 的情况下进行相同的更新?