通过SQL Server 2008中的触发器使用bcp

问题描述:

触发器的目的是在将数据插入到表中后,使用bcp从表中导出特定数据,所以我认为这样做是因为我知道触发器等待bcp,它正在等待要释放的表上的一个锁,但该锁保持到触发器之后,因此它不起作用。我该怎么做?或者我需要添加一些功能或东西的作品?通过SQL Server 2008中的触发器使用bcp

我使用SQL Server 2008的

ALTER TRIGGER [TRIGGER] on [TABLE] after INSERT AS BEGIN 
    DECLARE @CMD NVARCHAR(1000) 
    SET @CMD = 'cd.. && "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" "SELECT TOP 1 CODE FROM[TABLE] WITH (NOLOCK) ORDER BY ID DESC" queryout "\\FOLDER\FOLDER\FILE.txt" -T -c -S "[SERVERNAME]"' 
    EXEC master..XP_CMDSHELL @CMD 
END 

不要在触发器使用bcp。即使你能使它工作,它也会减慢数据库的速度,可能会导致数据库无法使用。 bcp是一个命令行实用程序,应被视为一个

我建议你使用一个SQL Server Agent到定期或触发的基础上执行额外的动作

您还可以阅读this的教程,这将有助于您开始使用代理

如果您没有SQL Server代理(Express不包括它),然后你有一些其他选项:

  • 写自己的代理。 Here is an example
  • 插入后调用存储过程。 This answer使用的方法来解决类似的问题,给你贴
  • 使用存储过程来写入数据的一个并处理出口代号
  • 使用上日程的计划任务处理数据(这是bcp可以不杀死使用服务器性能)
+0

嗨,SQL Server代理上可用的SQL Server代理? –

+0

不幸的不是。我会用替代方案更新我的答案 –

不知道这是否会工作,但你可以尝试更改为INSTEAD OF触发器和触发

我怀疑内做INSERT和bcp这可能会绕开桌子上的锁。

进一步阅读 - http://www.c-sharpcorner.com/UploadFile/37db1d/creating-and-managing-triggers-in-sql-server-20052008/

+0

感谢您的帮助,我更改为INSTEAD OF,但它是相同的,当我执行触发器时,它挂起... –