2017-03-09 43 views
0

触发器的目的是在将数据插入到表中后,使用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 

回答

0

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

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

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

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

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

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

+0

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