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

別の質問として投稿してください –

関連する問題