これを行うためのより良い方法が必要です。
次のように、すべての一意のレコードにフラグを立てたテーブルがあります。
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 を使用せずに同じ更新を行う方法はありますか?