2017-03-08 83 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

請發佈一個不同的問題 –