我是所有这一切的新手,并且刚开始编写脚本/编程。我搜索过高低,尝试了几件事,但我没有成功。我想做什么
Table1
有Column1
Table2
有Column2
在这些列中是文件路径。 Column1
文件路径为\\\server1\folder\video1.avi
,
Column2
文件路径为http://server2/folder/video1.mpg
我要做的是使用Table1
查询Table2
并匹配文件名,在本例中为video1
。此文件名将始终不同,因此需要一些东西,以便它自己找到字符串的一部分。匹配完成后,我需要Table1
更新Column1
,以使其与Table2.Column2
中的内容完全匹配。如果已完成更改并且我的程序的其余部分已完成运行,Table2
中的所有数据都将被删除,但我仍需要永久更改Table1.Column1
并且不会还原为旧文件路径。
提前感谢您的帮助!
编辑:
以下是我们数据库的文件名:
5149__20121030_120839.avi将转换为5149__20121030_120839.mpg 在任何给定的时间点,文件名的开头将在5100到5999之间,其余部分将随机变化。我目前如何设置:
我正在抓取文件名并将其保存到csv文件中。从那里我将这个csv文件上传到Table2.Column2
。正是在这个时候,我一直在查询部分文件路径以找到Table1.Column1
中的匹配项。找到一个匹配项我正在尝试更新Table1.Column1
中的整个字符串,以匹配Table2.Column2
中的字符串。完成所有操作后,我将删除Table2.Column2
,移动的所有文件,并在第二天开始。
我一直在寻找并尝试了一些事情,但到目前为止还没有运气。我最接近的是:
UPDATE Table1
SET Table1.Column1 = Table2.Column2
FROM Table1
FULL JOIN Table2 ON Table2.Column2 like '%' + Table1.Column1 + '%'
每当我运行它时,它需要Table1.Column1
并将所有内容设置为NULL,而不是替换Table2.Column2
中的内容。这只是我实验室的一个测试,看看它是否可行,我甚至还没有开始研究如何在两个不同的表之间匹配部分字符串。
答案 0 :(得分:3)
您没有提供足够的信息来了解两个表中路径和文件扩展名的变化,但假设它们是常量,您可以执行以下操作:
首先我设置一些模拟表并输入值
DECLARE @Table1 TABLE(Column1 varchar(200),keyfield varchar(50))
DECLARE @Table2 TABLE(Column2 varchar(200),keyfield varchar(50))
INSERT INTO @Table1
SELECT '\\\server1\folder\video1.avi',''
UNION ALL
SELECT '\\\server1\folder\video27.avi',''
INSERT INTO @Table2
SELECT 'http://server2/folder/video1.mpg',''
UNION ALL
SELECT 'http://server2/folder/video27.mpg',''
现在更新表格,以便使其工作:
UPDATE @Table1 SET keyfield=(REPLACE(REPLACE(Column1,'\\\server1\folder\',''),'.avi',''))
UPDATE @Table2 SET keyfield=(REPLACE(REPLACE(Column2,'http://server2/folder/',''),'.mpg',''))
在表1中启动值
现在,我使用keyField修改值以链接表
UPDATE t1
SET t1.Column1=t2.Column2
FROM @Table1 t1 INNER JOIN @Table2 t2 ON t1.keyfield=t2.keyfield
SELECT * FROM @Table1
您将看到@ Table1现在具有@ Table2
中的完整路径
答案 1 :(得分:0)
考虑文件路径变化这是一个非常丑陋的查询,可能无法进行优化,但是对于一次性运行并在一个脚本中完成所有操作:
UPDATE Table1
SET Table1.Column1 = Table2.Column2
FROM Table1
INNER JOIN Table2
ON substring(Table2.Column2,
len(Table2.Column2) - CASE charindex('\', reverse(rtrim(Table2.Column2))) WHEN 0 THEN charindex('/', reverse(rtrim(Table2.Column2))) ELSE charindex('\', reverse(rtrim(Table2.Column2))) END + 2,
charindex('.', Table2.Column2) - len(Table2.Column2) + CASE charindex('\', reverse(rtrim(Table2.Column2))) WHEN 0 THEN charindex('/', reverse(rtrim(Table2.Column2))) ELSE charindex('\', reverse(rtrim(Table2.Column2))) END - 2
)
=
substring(Table1.Column1,
len(Table1.Column1) - CASE charindex('\', reverse(rtrim(Table1.Column1))) WHEN 0 THEN charindex('/', reverse(rtrim(Table1.Column1))) ELSE charindex('\', reverse(rtrim(Table1.Column1))) END + 2,
charindex('.', Table1.Column1) - len(Table1.Column1) +CASE charindex('\', reverse(rtrim(Table1.Column1))) WHEN 0 THEN charindex('/', reverse(rtrim(Table1.Column1))) ELSE charindex('\', reverse(rtrim(Table1.Column1))) END - 2
)