まず第一に.. (それについて申し訳ありません;)) カーソルを使用しないでください..大文字で申し訳ありません...
カーソルの最も悪い点の 1 つは、カーソルがテーブルをロックできることです。これらの目的のために私がいつも行っていること (そしてこれは非常に高速です) として、for ループを使用します.. このように
declare @totrow int
, @currow int
, @result int
, @nsql nvarchar(max)
declare @sqlStatements table (
Id int identity(1, 1)
, SqlStatement varchar(max)
)
insert
into @sqlStatements
select 'QUERY PART'
from table
set @totrow = @@rowcount
set @currow = 1
while @totrow > 0 and @currow <= @totrow
begin
select @nsql = SqlStatement
from @SqlStatements
where Id = @currow
exec @result = xp_cmdshell @nsql
set @currow = @currow + 1
end
次の部分では、SQL Server プロセスは c:ドライブに書き込むための十分なアクセス許可を持っていますか?また、コードを実行するときにメッセージ ペインを調べてください。そこに何かが見つかるかもしれません。
あなたもできることは、手動で実行してみてください。 BCP ステートメントを 1 つ取得し、xp_cmdshell で実行するだけです。エラーは発生しますか?