データベースに保存されている画像をテキストに書き込むためにカーソルを使用しています。
ここのコードスニペット:
DECLARE @SOURCEPATH VARBINARY(MAX),
@DESTPATH VARCHAR(MAX),
@ext varchar(MAX),
@ObjectToken INT,
@image_ID Varchar(255)
DECLARE IMGPATH CURSOR FAST_FORWARD FOR
SELECT <my data>
FROM <my table>
OPEN IMGPATH
FETCH NEXT FROM IMGPATH INTO @SOURCEPATH, @image_ID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @DESTPATH = '<my path>'+ @image_ID
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @SOURCEPATH
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @DESTPATH, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
FETCH NEXT FROM IMGPATH INTO @SOURCEPATH, @image_ID
END
CLOSE IMGPATH
DEALLOCATE IMGPATH
ローカルドライブに問題なく書き込むことはできますが、書き込みたいネットワーク共有に書き込むことができません。ここの手順に従いました、
ドライブをSQLServerに「表示」できるようにするためですが、このマップされたドライブにイメージを書き込むことができません。
この機能はサポートされていますか、ネットワーク担当者にアクセス許可を確認するルートをたどる必要がありますか、それともこれは不可能ですか?
SQL Serverは通常、\\server\share\subfolder
のようなUNCパスを認識できます。
ただし、SQLServerを実行しているサービスがその共有に対する権限を持っている場合に限ります。たとえば、スケジュールされたジョブを実行している場合、ジョブはSQLエージェントサービスのユーザーとして実行されます。 SSMSで直接コードを実行している場合、またはプログラムから呼び出されたストアドプロシージャを実行している場合は、SQLEngineサービスにその共有フォルダーに対する権限が必要です。
そのユーザーがローカルユーザーのみの場合、共有フォルダーへの権限はありません。ボリュームにアクセスするには、SQLServerエンジンまたはエージェント(あるいはその両方)がドメインユーザーとして実行されている必要があります。
たとえば、バックアップを\\server\DBs\SQL\<server name>
共有ドライブに実行します。バックアップを成功させるには、SQLエージェントサービスアカウントにその共有フォルダーに対する完全な権限が必要です。これらのバックアップに関係するマップされたドライブはありません。