通过触发器执行时 BCP 挂起
BCP hang when executed through trigger
当我执行这个命令时,它起作用了!
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
但是,如果我从触发器执行它,它就会挂起!而且我必须重新启动服务
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
有人知道为什么吗??
您很可能在尝试从 bcp
访问 table 时遇到死锁,同时处理来自您尝试插入的 table 的触发器。
可以这样想:触发器等待 bcp,即等待 table 上的锁被释放,但该锁一直保持到触发器之后。
当我执行这个命令时,它起作用了!
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
但是,如果我从触发器执行它,它就会挂起!而且我必须重新启动服务
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
有人知道为什么吗??
您很可能在尝试从 bcp
访问 table 时遇到死锁,同时处理来自您尝试插入的 table 的触发器。
可以这样想:触发器等待 bcp,即等待 table 上的锁被释放,但该锁一直保持到触发器之后。