从版本控制的 EDM 系统重命名 table 中的重复文件?
Renaming duplicate files in a table from a version controlled EDM system?
我正在尝试重命名来自具有 300,000 行的 EDM 系统的 table 中的重复文件。我 运行 遇到的问题是数百个文件夹中有数千个重复的文件名,每个文件夹都有一个文件的多个版本。我需要创建唯一的文件名以导入到新系统中,因此我根据文件名和文件夹位置在文件扩展名 -1、-2、-3 等之前附加。
我想将第一个文件夹中文件名的初始实例及其所有版本附加为“-1”,将文件名的第二个实例及其在另一个文件夹中的版本附加为“-2”。我有文件 ID,可以用作发布附加的排序顺序,但顺序真的无关紧要。我提供了当前 table 结果的示例,以及嵌套在其中的所需结果。
到目前为止我想出的是:
With DuplicateFileName As
(
Select FolderID, FileName
, Row_Number() Over ( Partition By Filename Order By FolderID ) As Rnk
From NewFilename
)
Update NewFilename
Set FileModifier = Case
When Rnk > 1 Then '-' + Cast(Rnk As varchar(10))
Else ''
End
From NewFilename As T
Join DuplicateFileName As D
On D.FolderID = T.FolderID
下面是我得到的一个文件名的示例。它很接近,但无论我尝试什么,我都无法完全按照我的需要添加它。我很接近,但似乎无法让它完美。
FolderID FileID FileName Version Current Desired
3506 16875 Gadget.XLSX 1 -1
3506 16876 Gadget.XLSX 2 -1
3506 16877 Gadget.DOCX 1 -1
3506 16878 Gadget.DOCX 2 -1
3522 17578 Gadget.XLSX 1 -3 -2
3522 17579 Gadget.DOCX 1 -3 -2
3525 17602 Gadget.XLSX 1 -4 -3
3525 17603 Gadget.DOCX 1 -4 -3
而不是 ROW_NUMBER() 您需要使用 DENSE_RANK() 因为同一文件夹中的相同文件名可以具有相同的文件修饰符。并且不需要 CASE EXPRESSION。考虑以下
:
CREATE TABLE #NewFilename (FolderID int, FileID int, FileName varchar(40), Version int, FileModifier varchar(4) )
INSERT INTO #NewFilename VALUES(3506,16875,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3506,16876,'Gadget.XLSX',2,'')
INSERT INTO #NewFilename VALUES(3506,16877,'Gadget.DOCX',1,'')
INSERT INTO #NewFilename VALUES(3506,16878,'Gadget.DOCX',2,'')
INSERT INTO #NewFilename VALUES(3522,17578,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3522,17579,'Gadget.DOCX',1,'')
INSERT INTO #NewFilename VALUES(3525,17602,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3525,17603,'Gadget.DOCX',1,'')
With DuplicateFileName As
(
Select FolderID, FileName
, DENSE_RANK() Over ( Partition By Filename Order By FolderID ) As Rnk
From #NewFilename
)
Update #NewFilename
Set FileModifier = '-' + Cast(Rnk As varchar(10))
From #NewFilename As T
Join DuplicateFileName As D
On D.FolderID = T.FolderID
select * from #NewFilename
order by FolderID
我正在尝试重命名来自具有 300,000 行的 EDM 系统的 table 中的重复文件。我 运行 遇到的问题是数百个文件夹中有数千个重复的文件名,每个文件夹都有一个文件的多个版本。我需要创建唯一的文件名以导入到新系统中,因此我根据文件名和文件夹位置在文件扩展名 -1、-2、-3 等之前附加。
我想将第一个文件夹中文件名的初始实例及其所有版本附加为“-1”,将文件名的第二个实例及其在另一个文件夹中的版本附加为“-2”。我有文件 ID,可以用作发布附加的排序顺序,但顺序真的无关紧要。我提供了当前 table 结果的示例,以及嵌套在其中的所需结果。
到目前为止我想出的是:
With DuplicateFileName As
(
Select FolderID, FileName
, Row_Number() Over ( Partition By Filename Order By FolderID ) As Rnk
From NewFilename
)
Update NewFilename
Set FileModifier = Case
When Rnk > 1 Then '-' + Cast(Rnk As varchar(10))
Else ''
End
From NewFilename As T
Join DuplicateFileName As D
On D.FolderID = T.FolderID
下面是我得到的一个文件名的示例。它很接近,但无论我尝试什么,我都无法完全按照我的需要添加它。我很接近,但似乎无法让它完美。
FolderID FileID FileName Version Current Desired
3506 16875 Gadget.XLSX 1 -1
3506 16876 Gadget.XLSX 2 -1
3506 16877 Gadget.DOCX 1 -1
3506 16878 Gadget.DOCX 2 -1
3522 17578 Gadget.XLSX 1 -3 -2
3522 17579 Gadget.DOCX 1 -3 -2
3525 17602 Gadget.XLSX 1 -4 -3
3525 17603 Gadget.DOCX 1 -4 -3
而不是 ROW_NUMBER() 您需要使用 DENSE_RANK() 因为同一文件夹中的相同文件名可以具有相同的文件修饰符。并且不需要 CASE EXPRESSION。考虑以下
:
CREATE TABLE #NewFilename (FolderID int, FileID int, FileName varchar(40), Version int, FileModifier varchar(4) )
INSERT INTO #NewFilename VALUES(3506,16875,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3506,16876,'Gadget.XLSX',2,'')
INSERT INTO #NewFilename VALUES(3506,16877,'Gadget.DOCX',1,'')
INSERT INTO #NewFilename VALUES(3506,16878,'Gadget.DOCX',2,'')
INSERT INTO #NewFilename VALUES(3522,17578,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3522,17579,'Gadget.DOCX',1,'')
INSERT INTO #NewFilename VALUES(3525,17602,'Gadget.XLSX',1,'')
INSERT INTO #NewFilename VALUES(3525,17603,'Gadget.DOCX',1,'')
With DuplicateFileName As
(
Select FolderID, FileName
, DENSE_RANK() Over ( Partition By Filename Order By FolderID ) As Rnk
From #NewFilename
)
Update #NewFilename
Set FileModifier = '-' + Cast(Rnk As varchar(10))
From #NewFilename As T
Join DuplicateFileName As D
On D.FolderID = T.FolderID
select * from #NewFilename
order by FolderID