Anda dapat membuat tabel lain untuk menyimpan sementara hasil dari INSERTED
sebelum memanggil 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
EDIT: Tampaknya ini tidak akan berhasil, karena tabel tempInserted
terkunci pada saat bcp
disebut.
Berikut ini adalah ide solusi, mungkin bukan solusi yang paling elegan tetapi harus berhasil (jika Anda tidak menggunakan edisi ekspres). Anda dapat menggunakan pemicu hanya untuk menyimpan data yang dimasukkan ke dalam tabel ini dan Anda dapat membuat pekerjaan yang berjalan secara berkala (katakanlah setiap 5 menit) dan membaca dari tabel itu, menyalin ke file dan menghapus.
Jadi pemicunya adalah:
create trigger monitorTrigger on test
AFTER insert
as
BEGIN
INSERT INTO test2.dbo.tempInserted
SELECT * FROM INSERTED
END
dan Prosedur Tersimpan untuk menyalin ke file - yang dapat Anda jalankan dari pekerjaan:
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