【发布时间】:2012-10-20 05:07:05
【问题描述】:
我对所有这些都是新手,并且刚刚开始编写脚本/编程。我搜索了高低并尝试了几件事,但我没有成功。我想做什么
-
Table1有Column1 -
Table2有Column2
在这些列中是文件路径。 Column1 文件路径将是\\\server1\folder\video1.avi,
Column2 文件路径将是 http://server2/folder/video1.mpg
我要做的是用Table2 查询Table1 并匹配文件名,在本例中为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 中的内容。这只是我实验室的一个测试,看看它是否会起作用,我什至还没有开始研究如何在两个不同的表之间匹配字符串的一部分。
【问题讨论】:
-
是否要从 Column2 的路径中提取 video1 以匹配 Table1 中存在的记录? Table1 记录是否已经存在?在将其放入 sql 之前将该名称提取到另一个字段中,然后关闭该字段呢?
-
大卫,我添加了更多信息。希望它有所帮助。就像我说的那样,我对这一切都很陌生,并且正在努力学习。
-
您的示例中 UPDATE 的问题是您将 Column2 'server2/folder/video1.mpg' 中的完整路径与部分路径(如 '%' + Table1.Column1 + '%')进行比较在第 1 列。除非您先提取文件名或 Column2 中的完整路径存在于 Column1 中,否则这些将永远不会匹配。请参阅下面的示例以获取可能的解决方案。
-
您需要在加载到 SQL 之前或之后提取文件名(如果您要匹配记录)。
标签: sql-server powershell scripting