通过 sql 服务器 2008 中的触发器使用 bcp

Using bcp through a trigger in sql server 2008

触发器的目的是在 table 上插入数据后使用 bcp 从 table 导出特定数据,所以我想这样做,我知道触发器等待对于 bcp,它正在等待 table 上的锁被释放,但该锁一直保持到触发器之后,因此它不起作用。我该怎么做?或者我需要添加一些功能或其他东西吗?

我正在使用 SQL Server 2008。

ALTER TRIGGER [TRIGGER] on [TABLE] after INSERT AS BEGIN 
   DECLARE @CMD NVARCHAR(1000) 
   SET @CMD = 'cd.. && "C:\Program Files\Microsoft SQL Server0\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

不确定这是否可行,但您可以尝试更改为 INSTEAD OF 触发器并在触发器内执行 INSERT 和 bcp

我怀疑这可能会绕过 table 上的锁。

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

不要在触发器中使用 bcp。即使您可以让它工作,它也会降低您的数据库速度,可能会达到无法使用的程度。 bcp 是一个命令行实用程序,应视为一个

我建议您使用 SQL Server Agent 在计划或触发的基础上执行额外的操作

您还可以阅读 this 帮助您开始使用代理的教程

如果您没有 SQL 服务器代理(Express 不包含它),那么您还有其他一些选择:

  • 编写自己的代理。 Here is an example
  • 插入后调用存储过程。 This answer 使用该方法解决了与您发布的问题类似的问题
  • 使用存储过程写入数据并处理导出代码
  • 使用计划任务按计划处理数据(这是 bcp 可以在不降低服务器性能的情况下使用的地方)