我的硬盘中有数千张照片。所有照片文件名由4个参数组成:
'7 digit number ' + '-' + '3 digit number ' + '.gif'
例如:1000091-356.gif
我想知道如何编写查询以便使用3 digit number
文件名作为参数来更新我的表,哪个主键与文件名的7 digit number
匹配。
换句话说,查询的行为如下:update myTable set col2 = 356 where col1=1000091
适用于所有照片。
答案 0 :(得分:3)
首先尝试将文件名放入表格中(使用下面的脚本)
CREATE TABLE dirList (
id int identity(1,1),
line nvarchar(1000)
)
GO;
INSERT INTO dirList (line) EXEC xp_cmdshell 'dir C:\PathToMyPhotos'
SELECT * FROM dirList;
WITH CTE AS (
SELECT
id,
SUBSTRING(line,1,17) [date],
SUBSTRING(line,18,19) sizeordir,
SUBSTRING(line,37,100) name
FROM dirList
WHERE id > (
SELECT MIN(id) FROM dirList WHERE line LIKE '%<DIR>%..%'
) AND id < (SELECT MAX(id) - 2 FROM dirList)
)
SELECT
id,
[date],
isDirectory = CASE WHEN sizeordir LIKE '%<DIR>%' THEN 1 ELSE 0 END,
isFile = CASE WHEN sizeordir LIKE '%<DIR>%' THEN 0 ELSE 1 END,
name
FROM cte
现在您可以使用以下方式查询文件名:
declare @Lookup varchar(3)
set @Lookup = '123'
select name
from dirList
where isFile = 1 and substring(name, len(name)-7,3) = @Lookup
答案 1 :(得分:1)
您必须利用sp_OACreate和FileSystemObject的强大功能才能从本地计算机读取文件名。
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT
这篇文章详细解释了这一点。
如果你真正需要的只是文件名,那么FSO可能对你需要的东西来说太强大了。我几乎忘记了xp_cmdshell,这对于像“DIR”这样的小工作来说是完美的 - 请参阅Mangist的回答。