Il doit y avoir une meilleure façon de procéder.Enregistrement TSQL en double avec un seul identifiant unique
J'ai une table que je hélé tous les enregistrements uniques comme celui-ci:
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)
Maintenant, je voudrais mettre à jour tous les enregistrements de doublons (où RowNumber> 1) au ParentId unique. En ce moment j'utilise un UDF, qui fonctionne, mais cela prend beaucoup de temps. Voici l'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
Et voici la déclaration de mise à jour J'utilise actuellement:
UPDATE dt
SET dt.ParenId = dbo.getParentTransId (dt.TransID, dt.StrippedBusName)
FROM dbo.Members dt
GO
Est-il possible de faire la même mise à jour sans utiliser l'UDF?
Nice! Encore mieux si je cours la dernière mise à jour suggérée sans le "AND dt1.ParentId IS NOT NULL", je n'ai pas besoin d'exécuter ma première mise à jour pour signaler les uniques. – mwhib