Bueno, antes que nada... (y perdón por eso;) ) NO USE CURSORES... y perdón por las mayúsculas...
Una de las cosas más malas de los cursores es que pueden bloquear tu tabla. Lo que siempre hago para estos propósitos (y que es bastante más rápido), uso un bucle for... así
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 la siguiente parte, ¿el proceso de SQL Server tiene suficiente permiso para escribir en la unidad c:? Además, mire en su panel de mensajes cuando ejecute su código, ¿quizás pueda encontrar algo allí?
Lo que también puedes hacer, intenta ejecutarlo manualmente. Simplemente obtenga una instrucción BCP y ejecútela con xp_cmdshell. ¿Da algún error?