2017-03-08 82 views
1

当我执行此命令时,它可以工作!通过触发器执行BCP时挂起

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 

有人知道为什么?

+0

'xp_cmdshell'只具有SQL服务帐户的权限。它是否具有指定路径的权限?另外,你为什么要做'cd..'? –

回答

0

在处理来自您要插入的同一个表的触发器时,您很可能会尝试从bcp访问表中的表。

想一想:触发器等待bcp,即等待表中的锁被释放,但该锁保持到触发器之后。

+0

触发器的porpuse在将数据插入到表中后从bcp中导出特定的数据,所以我认为这样做,你知道我该怎么做吗?或者我需要添加一些功能或东西的作品? –

+0

请发布一个不同的问题 –