以下のスクリプトを使用して、別のテーブルからパス情報を読み込み、sp_OAGetPropertyを使用して変数を設定し、表。スクリプトは、255(ディレクトリとファイルを含むルックアップテーブルの行640について)を挿入し、新しいテーブルのすべての行に無限に255行のエントリを入れてループするまでうまく動作します。私はこれが何か、多分SQL設定/オプションの多分、多分OLE関連、おそらくウィンドウの制限だと思っていますか?ここでは、助けてください、私が持っているものである:ここでは は、私が話していた出力部である:OLEを使用してファイルデータを取得し、テーブルに入力するSQLスクリプトは、行255まで正常に動作します。
Select * FROM FullDirectoryTree
SET @DirTreeCount = @@ROWCOUNT
SET @Counter = 1
EXEC dbo.sp_OACreate 'Scripting.FileSystemObject', @ObjFileSystem OUT
WHILE @Counter <= @DirTreeCount
BEGIN
SELECT @CurrentName = subdirectory,
@IsFile = Is_File
FROM FullDirectoryTree
WHERE RowNum = @Counter
IF @IsFile = 1 AND @CurrentName LIKE '%%'
BEGIN
EXEC dbo.sp_OAMethod @ObjFileSystem,'GetFile', @ObjFile OUT, @CurrentName
EXEC dbo.sp_OAGetProperty @ObjFile, 'Path', @Path OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'ShortPath', @ShortPath OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'Name', @Name OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'ShortName', @ShortName OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'DateCreated', @DateCreated OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'DateLastAccessed', @DateLastAccessed OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'DateLastModified', @DateLastModified OUT
EXEC dbo.sp_OAGetProperty @ObjFile, 'Size', @Size OUT
INSERT INTO FileDetails
(Path, ShortPath, Name, ShortName, DateCreated,
DateLastAccessed, DateLastModified, Size)
SELECT @Path,@ShortPath,@Name,@ShortName,@DateCreated,
@DateLastAccessed,@DateLastModified,@Size
END
SELECT @Counter = @Counter + 1
END
EXEC sp_OADestroy @ObjFileSystem
EXEC sp_OADestroy @ObjFile
サンプルデータ:
Rownum Name Path
249 954011.dwg D:\yadayadayada.dwg
250 954012.dwg D:\Data\GS...\954012.dwg
251 954013.dwg D:\Data\GS...\954013.dwg
252 954014-A.dwg D:\Data\GS...\954014-A.dwg
253 954015-A.dwg D:\Data\GS...\954015-A.dwg
254 954016-A.dwg D:\Data\GS...\954016-A.dwg
255 954017-A.dwg D:\Data\GS...\954\954017-A.dwg
256 954017-A.dwg D:\Data\GS...\954\954017-A.dwg
954017-ちょうど私は、クエリを殺すまで繰り返し続けます。 ..返されたデータに長いパス文字列があり、私は上記のファイル名とほとんど同じです...何が欠けていますか?
開始/終了のペアを強調表示するようにコードを編集しました。 'SELECT @Counter = @Counter + 1'の後ろに' PRINT @ Counter'を追加すると助けになるかもしれません –
'DECLARE @ Counter'コードはどこですか? '@ Counter'はどのデータ型ですか? 'INT'でなければなりません –