通过触发器执行时BCP挂起

时间:2017-03-08 18:41:42

标签: sql-server-2008 bcp xp-cmdshell

当我执行此命令时,它可以工作!

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

但是,如果我从触发器执行它,它会挂起!我必须重新启动服务

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

有人知道为什么??

1 个答案:

答案 0 :(得分:0)

在处理来自您尝试插入的同一个表的触发器时,您很可能处于死锁状态,试图从bcp访问该表。

想象一下:触发器等待bcp,即等待表上的锁被释放,但该锁一直持续到触发后。