可以說我有聲明,像這樣表變量...SQL服務器:ROW_NUMBER()OVER上表變量修改重複列
DECLARE @LocalTable TABLE
(
IdField NVARCHAR(MAX),
NameField NVARCHAR(MAX)
)
我填充它是這樣的...
INSERT INTO @LocalTable
SELECT
IdColumn,
NameColumn
FROM SourceTable
NameColumn
在源表中可能有重複的值,因此本地表中的NameField
將具有相同的重複值。
而且我們說,我想插入本地表到目標表是這樣的...
INSERT INTO TargetTable (NewIdColumn, NewNameColumn)
SELECT
IdField,
NameField
FROM
@LocalTable
但是:NewNameColumn
在TargetTable
有UNIQUE
約束,從而重複導致異常。
我想申請這個例子中,
ROW_NUMBER() OVER(PARTITION BY NameField ORDER BY NameField)
使得NameField
附加/與表示其重複的數位後綴。
我有這方面的工作的例子,可以選擇正確附加價值,但我不能得到這個在這樣的更新語句工作:提前
UPDATE localtable
SET NameField = AppendedNameField
FROM @LocalTable AS localtable
SELECT
CONCAT(Ref.NameField, ROW_NUMBER() OVER (PARTITION BY Ref.NameField
ORDER BY Source.IdField)), *
FROM
@LocalTable AS Source
INNER JOIN
@LocalTable AS Ref ON Ref.NameField = Source.NameField
AND Ref.IdField != Source.IdField
感謝。
有你無法選擇不同的理由嗎?如果是這樣,您需要決定要加載哪些數據,並使用聚合函數或其他方法來獲取數據。 –
您可以在此處執行許多操作 - 選擇不同的,使用row_number,並且可能優先於另一個,還可以添加索引忽略重複鍵。你需要添加一些注意事項,所以答案將是有意義的。 –