Должен быть лучший способ сделать это.TSQL flag дублирует записи с единственным уникальным идентификатором
У меня есть таблица, в которой я помеченный все уникальные записи, как это:
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?
Ницца! Еще лучше, если я запустил последнее обновление, предлагаемое без «И dt1.ParentId IS NOT NULL», мне не нужно запускать свое первое обновление, чтобы отметить uniques. – mwhib