【问题标题】:BCP hang when executed through trigger通过触发器执行时 BCP 挂起
【发布时间】:2017-07-29 11:54:47
【问题描述】:

当我执行这个命令时,它起作用了!

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

有人知道为什么吗??

【问题讨论】:

  • xp_cmdshell 仅具有 SQL 服务帐户的权限。它是否具有指定路径的权限。还有,你为什么要cd..

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


【解决方案1】:

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

可以这样想:触发器等待 bcp,即等待表上的锁被释放,但该锁一直保持到触发器之后。

【讨论】:

  • 触发器的主体是在将数据插入到该表后使用bcp从该表中导出特定数据,所以我想这样做,你知道我该怎么做吗?还是我需要添加一些功能或其他东西?
  • 请作为不同的问题发帖
猜你喜欢
  • 2023-04-06
  • 2018-05-25
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多