現在、更新または挿入後にテキストファイルに書き込む実行ファイルを実行するテーブルDEF_TESTにWriterという名前のトリガが設定されています。SQLトリガから起動したときに実行可能ファイルに書き込めません
ALTER TRIGGER [dbo].[Writer] ON [dbo].[DEF_TEST]
AFTER INSERT, UPDATE
AS
BEGIN
BEGIN TRY
DECLARE @cmd as varchar(500)
SET @cmd = 'Path\Write_To_File.exe'
EXEC dbo.RunCMD @cmd
--Insert ok if no error are thrown
INSERT INTO DEF_TEST(ErrorLine, ErrorMessage)
VALUES('ok', 'ok')
END TRY
BEGIN CATCH
INSERT INTO DEF_TEST(ErrorLine, ErrorMessage)
VALUES(ERROR_LINE(), ERROR_MESSAGE())
END CATCH
END
Write_To_file.exeは、本質的にこれです:
Imports System.IO
Module Main
Sub Main()
Try
File.WriteAllText(".\test.txt", "test", System.Text.Encoding.UTF8)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Module
このコードは動作しますが、私は「Write_To_File.exe」のコードを変更した場合だけ、コンソールに印刷するので、それはこのようになりますトリガーは完全に機能します。 "Write_To_File.exe"をダブルクリックして実行しようとすると、 "test.txt"を作成して書き込むことができます。しかし、トリガが "Write_To_File.exe"を起動し、 "test.txt"に書き込もうとすると、何もしません。タスクマネージャーではタスクは起動されず、トリガーからのエラーはスローされません。
"test.txt"に書き込もうとした後にコードがうまくいかないというのは、うまくいきません。たとえば、コンソールに印刷しようとすると、動作しません。
SQL Serverにフォルダ全体の完全な制御があるため、ファイルのセキュリティに問題はないとは思いません。
明らかなものがありませんか? "Writer"がトリガーするときに何が何回起こるかを見る方法はありますか?
VBからエラーメッセージを受け取ろうとしてtry/catch文を追加しましたが、何も起こりません。 Visual Studioデバッガを実行するためにローカルのSQL Serverクライアントをダウンロードしようとしています。 –
デフォルトで管理者として.exeを実行しようとしましたか? – Juanche
はい、私はそれをローカルで実行していました。幸いにも、私は解決策を見つけました、ありがとう:) –