触发器的目的是在该表上插入数据后使用bcp从表中导出特定数据,所以我想这样做,我知道触发器等待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 :(得分:0)
不确定这是否可行但您可以尝试更改为INSTEAD OF触发器并在触发器中执行INSERT和bcp
我怀疑这可能会绕过桌子上的锁定。
答案 1 :(得分:0)
不要在触发器中使用bcp
。即使你可以让它工作,它也会减慢你的数据库速度,可能会使它无法使用。 bcp
是一个命令行实用程序,应该被视为一个
我建议您使用SQL Server Agent按计划或触发的方式执行额外操作
您还可以阅读有助于您开始使用代理
的this教程如果您没有SQL Server代理(Express不包含它),那么您还有其他一些选择:
bcp
而不会破坏服务器性能)