私は、入力を渡すことができるストアドプロシージャを使用してTransact-SQLでファイルに書き込もうとしています。ただし、SQL Server 2012でコマンドを実行するたびにCommand(s) completed successfully.
と表示されますが、テキストファイルに移動してもテキストは表示されません。どんなアイデアが間違っている可能性がありますか?sp_OAMethodを使用してテキストファイルに書き込むときに何も表示されない
マイコード:
-- GRANTS PERMISSION TO OLE AUTOMATION -- sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO DROP PROC WriteToGSQL; -- ENCAPSULATING THE SPECIFIC CODE THAT DOES THE ACTUAL WRITING TO THE TEXT FILE -- SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[WriteToGSQL] @Path VARCHAR(2000), @Text VARCHAR(2000) AS BEGIN DECLARE @Auto INT DECLARE @FileID INT EXECUTE sp_OACreate 'Scripting.FileSystemObject', @Auto OUT EXECUTE sp_OAMethod @Auto, 'OpenTextFile', @FileID OUT, @Path, 8, 1 EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, @Text EXECUTE sp_OADestroy @FileID EXECUTE sp_OADestroy @Auto END DECLARE @File VARCHAR(2000); DECLARE @Txt VARCHAR(2000); SET @File = 'C:\xxxxxxxx\xxxx\test.txt'; SET @Txt = 'Did it work?'; EXEC WriteToGSQL @File, @Txt;
あなたは 'sp_OACreate'と' sp_OAMethod'への呼び出しの戻り値をチェックしていないので、何かが間違っているかどうかを確認する方法はありません。 'sp_OAGetErrorInfo'と一緒に戻り値を使用してください。サンプルについては、[MSDN](https://msdn.microsoft.com/library/ms174984)を参照してください。 –
明らかに「間違っている」のは、テキストファイルで 'Close'を呼び出さないことです。 'sp_OADestroy'を呼び出すだけでオブジェクトが取り除かれ、ストリームが内容をフラッシュするのを防ぐことができます。 (私は実際にそれを使用している経験がないので、これは推測です。) –
@JeroenMostert応答いただきありがとうございます。私はお詫びします、私はTSQLに慣れていないので、私はsp_OAの機能にあまり慣れていません。私はMSDNの例を見ましたが、運がないと、あなたが意味することを私に見せることは可能でしょうか? –