INSERTED
からの結果を一時的に保存する別のテーブルを作成できます bcp
を呼び出す前に .
create trigger monitorTrigger on test
AFTER insert
as
declare @sql varchar(8000)
--delete it every time
TRUNCATE TABLE test2.dbo.tempInserted
--populate it from inserted
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
--use it in bcp
SELECT @sql = 'bcp "select * from test2.dbo.tempInserted" queryout I:\File\mytest.txt -c -t -T -S YAMUNA\SQLEXPRESS'
exec xp_cmdshell @sql
編集: テーブル tempInserted
のため、これは明らかに機能しません。 bcp
の時点でロックされています
これは回避策のアイデアです。おそらく最も洗練されたソリューションではありませんが、動作するはずです (Express Edition を使用していない場合)。トリガーを使用して、挿入されたデータをこのテーブルに保存し、定期的に (たとえば 5 分ごとに) 実行され、そのテーブルから読み取り、ファイルにコピーして削除するジョブを作成できます。
したがって、トリガーは次のようになります:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
およびファイルにコピーするストアド プロシージャ - ジョブから実行できます:
CREATE PROC transferToFile
AS
BEGIN
declare @sql varchar(8000)
SELECT @sql = 'bcp "select * from test2.dbo.tempInserted" queryout I:\File\mytest.txt -c -t -T -S YAMUNA\SQLEXPRESS'
exec xp_cmdshell @sql
--delete at the end
TRUNCATE TABLE test2.dbo.tempInserted
END