他のプログラムが値をテーブルに挿入するときにプログラムを実行しようとしています。プログラムAがtable1に値を挿入するときに、同じtable1から入力を受け取るプログラムBを実行する必要がある場合、テーブルのAfterトリガーを適用しました。挿入トリガーがテーブルとプロセス全体をブロックした後
USE [capstone]
GO
SET ANSI_NULLS ON
GO
CREATE trigger [dbo].[api_trig] on [dbo].[search]
after insert
AS
EXEC master..xp_CMDShell 'c:\Python34\python.exe c:\Python34\search_test.py'
この検索プログラムは同じテーブルから入力を受け取ります。サーチ。しかし、いったん挿入または実行すると、そのテーブルは何らかのループに陥り、タイムアウトエラーが発生するため、そのテーブルで何年も実行されます。私はこの方法 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/77fc7e09-ed14-481f-89d5-d5e143dab7bd/trying-to-delete-a-table-in-sql-server-management-studio-and-getting-a-strange-error?forum=sqldatabaseengine とエラーでプロセスを強制終了する必要があり、これを停止し、再びテーブルにアクセスするために
は、プログラムsearch_testは、クエリの実行のプロセスをブロックしていることを私に示しています。 私はトリガーがあなたのプログラムが終了するまですべてのトランザクションを解放し、ロックやコミットする機会がありません原因となったプロセスを意味し、エラー の理由/ソリューションTIA
このデザインの目的は何ですか?一般的に、外部(または任意の)プログラムをトリガから呼び出すことは望ましくありません。全体のポイントは、新しいレコードを持つプログラムBの実行を持つことがある場合は、サービス・ブローカーをよく読んで、またはタイムスタンプまたはID列を追加し、新しいデータのすべてを取り、それらにプロセスを実行するスケジュールされたタスクを作成します。この方法では、インサート自体から実行を「物理的に」切り離しますが、2つのコマンドを論理的に結合させます。 –