Eh bien, tout d'abord... (et désolé pour ça;) ) N'UTILISEZ PAS DE CURSEURS... et désolé pour les majuscules...
L'une des pires choses à propos des curseurs est qu'ils peuvent verrouiller votre table. Ce que je fais toujours à ces fins (et qui est assez rapide), j'utilise une boucle for... comme celle-ci
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
Pour la partie suivante, le processus SQL Server a-t-il suffisamment d'autorisations pour écrire sur le lecteur c: ? Aussi, regardez dans votre volet message lorsque vous exécutez votre code, peut-être y trouverez-vous quelque chose ?
Ce que vous pouvez également faire, essayez de l'exécuter manuellement. Obtenez simplement une instruction BCP et exécutez-la avec xp_cmdshell. Cela donne-t-il des erreurs ?