1

我的硬盘里有成千上万张照片。所有照片文件名由 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对于所有照片。

4

2 回答 2

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
于 2012-06-26T16:28:50.013 回答
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 的回答。

于 2012-06-26T16:28:10.853 回答