大家早上好,
我有点心不在焉,想看看有没有人能帮我。我有一个表,库存PDF文件,我们的办公室创建。我们已经更改了命名约定,我正在尝试开发逻辑,指定何时创建了一个具有新命名约定的PDF来标记旧的命名约定,以便我可以开发一个批处理脚本将它们移出文件位置。下面是一些例子。顺便说一下,每个文件在表中都是自己的行。
PAR ORIGFILENAME
111100000012 | 1100000012.pdf
111100000012 | 1100000012_C_1_UB.pdf
111100000012 | 1100000012_R_1.pdf新的命名约定包含_R_Number或_C_Number。在上面的例子中,第一个文件是旧的,我想保留第二个文件。
第二个例子有更多内容。下面是5个文件。我想保留最后两个有新的命名约定,并删除前3。
PAR ORIGFILENAME
1100000076 1100000076-2.pdf
1100000076 1100000076-3.pdf
1100000076 1100000076.pdf
1100000076 1100000076_C_7_BARN.pdf
1100000076 1100000076_R_1.pdf如果我能在新文件存在时输入这些旧文件,我的计划是将这些名称开发成批处理脚本,并将其合并到每周运行一次的SSIS包中,以保持PDF存储库的干净。我感谢任何帮助和煽动。
发布于 2021-12-02 15:40:54
下面的工作应该是可行的,尽管更多的样本数据将是有用的。
以下使用可更新的CTE标识旧/新格式名称,并删除相同PAR具有新格式的旧格式
with f as (
select *,
case when OrigFilename like '%*_%' escape '*' then 0 else 1 end del
from t
)
delete from f
where del=1
and exists (select * from f f2 where f2.par=f.par and f2.del=0)发布于 2021-12-02 15:33:52
如果您试图突出显示要删除的记录--并且只想以旧格式返回记录,那么当C_7和R_1记录同时存在时,可能是这样吗?
;WITH c_7_records AS (
SELECT par
FROM my_table
WHERE origfilename LIKE '%_C_7_%'
),
r_1_records AS (
SELECT par
FROM my_table
WHERE origfilename LIKE '%_R_1%'
),
records_to_remove AS (
SELECT
DISTINCT mt.origfilename
FROM my_table AS mt
JOIN c_7_records AS cr ON mt.par = cr.par
JOIN r_1_records AS rr ON mt.par = rr.par
WHERE mt.origfilename NOT LIKE '%_C_7_%'
AND mt.origfilename NOT LIKE '%_R_1%'
)
SELECT * FROM records_to_remove;sql小提琴
https://stackoverflow.com/questions/70201648
复制相似问题