別のサーバーの共有ドライブにマップする一時ドライブをデータベースサーバーに作成することにより、BCPを使用してネットワークドライブにファイルを書き込むことができるストアドプロシージャがあります。正常に動作していますが、最後のEXEC
コマンドからエラーが返さThere are open files and/or incomplete directory searches pending on the connection to U:.
れます。これは、ファイルの書き込みが完了する前に、ドライブの削除コマンドを実行しようとしていると推測していることを示しています。procの実行後にステートメントを実行すると、ドライブが正常に削除されます。手順は次のとおりです。
CREATE PROCEDURE dn_ExportFile
@ServerName varchar(50),
@ServerPath varchar(500),
@FileName varchar(100),
@Query varchar(max),
@UserName varchar(100),
@Password varchar(100),
@Drive varchar(1) = 'U'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @cmd VARCHAR(8000)
--Set up virtual drive pointing to desired path
SET @cmd = 'NET USE ' + @Drive + ': ' + @ServerPath + ' /user:' + @ServerName + '\' + @UserName + ' ' + @Password
PRINT @cmd
EXEC xp_cmdshell @cmd
--Export data using BCP to virtual drive
SET @cmd = 'BCP "' + @Query + '" QUERYOUT "' + @Drive + ':\' + @FileName + '" -c -t -T'
PRINT @cmd
EXEC xp_cmdshell @cmd
--Delete virtual drive
SET @cmd = 'NET USE ' + @Drive + ': /delete'
PRINT @cmd
EXEC xp_cmdshell @cmd
END
ストアドプロシージャ内の一時ドライブを正常に削除する方法はありますか?