1

我对这一切都很陌生,并且刚刚开始编写脚本/编程。我搜索了高低并尝试了几件事,但我没有成功。我想要做什么

  • Table1Column1
  • Table2Column2

这些列中是文件路径。Column1文件路径将是\\\server1\folder\video1.aviColumn2文件路径将是http://server2/folder/video1.mpg

我想要做的是查询Table1Table2匹配文件名,在这种情况下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. 这只是我实验室中的一个测试,看看它是否会起作用,我什至还没有开始研究如何在两个不同的表之间匹配字符串的一部分。

4

2 回答 2

3

You haven't provided enough information to know how much variation there is in the path and file extension in the two tables, but assuming they are constant, you could do something like this:

First I setup some mock tables and enter values

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',''

Now update the tables like you may need to in order to make this work:

UPDATE @Table1 SET keyfield=(REPLACE(REPLACE(Column1,'\\\server1\folder\',''),'.avi',''))
UPDATE @Table2 SET keyfield=(REPLACE(REPLACE(Column2,'http://server2/folder/',''),'.mpg',''))

Start values in Table1

enter image description here

Now, I modify the values using the keyField to link the tables

UPDATE t1
SET t1.Column1=t2.Column2
FROM @Table1 t1 INNER JOIN @Table2 t2 ON t1.keyfield=t2.keyfield

SELECT * FROM @Table1

You will see that @Table1 now has the full path that was in @Table2

enter image description here

于 2012-10-30T19:35:27.997 回答
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 
        )
于 2012-10-30T20:15:05.967 回答