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は必要なものに対して強力すぎる可能性があります。「DIR」のような小さな仕事に最適なxp_cmdshellをほとんど忘れていました。Mangistの回答を参照してください。

于 2012-06-26T16:28:10.853 に答える