2012-06-26 53 views
-1

我在硬盘上有数千张照片。所有的照片文件名由4个参数:如何在t-sql中从硬盘中读取文件名

'7 digit number ' + '-' + '3 digit number ' + '.gif' 

例如:1000091-356.gif

我不知道怎么做才能使用的文件名的3 digit number作为paramer更新我的表编写一个查询其主键匹配文件名称的7 digit number

换一个词,用于像所有照片一样的查询:update myTable set col2 = 356 where col1=1000091

+1

这是什么都与阅读文件做名字呢?你想要一个查询传入参数,还是查询应该从文件名读取? – LittleBobbyTables

+0

从文件名读取。 – Mostafa

回答

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

您必须利用sp_OACreate和FileSystemObject的权力才能从本地机器读取文件名。

EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT 

这是一篇文章,详细解释了这一点。

http://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/


如果你真正需要的是文件名,FSO可能是你需要的东西太强大。我几乎忘记了xp_cmdshell,它非常适合像“DIR”这样的小工作 - 请参阅Mangist的回答。

+0

这可能是太多的努力? – Mangist

+0

我认为'xp_cmdshell'会简单得多。 –

相关问题