Bem, antes de mais nada.. (e desculpe por isso;) ) NÃO USE CURSORES..e desculpe pelas maiúsculas...
Uma das coisas mais ruins sobre os cursores é que eles podem bloquear sua mesa. O que eu sempre faço para esses propósitos (e que é bem mais rápido), eu uso um loop for .. assim
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
Para a próxima parte, o processo do SQL Server tem permissão suficiente para gravar na unidade c:? Além disso, olhe para o seu painel de mensagens ao executar seu código, talvez você possa encontrar algo lá?
O que você também pode fazer, tente executá-lo manualmente. Basta obter uma instrução BCP e executá-la com o xp_cmdshell. Dá algum erro?