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

다른 질문으로 올리십시오. –