Cóż, przede wszystkim... (i przepraszam za to;) ) NIE UŻYWAJ KURSORA... i przepraszam za wersaliki...
Jedną z najgorszych rzeczy związanych z kursorami jest to, że mogą zablokować Twój stół. To, co zawsze robię w tych celach (i co jest dość szybsze), używam pętli for .. w ten sposób
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
W następnej części, czy proces SQL Server ma wystarczające uprawnienia do zapisu na dysku c:? Zajrzyj również do okienka wiadomości podczas wykonywania kodu, może znajdziesz tam coś?
Co również możesz zrobić, spróbuj wykonać to ręcznie. Po prostu weź jedną instrukcję BCP i wykonaj ją za pomocą xp_cmdshell. Czy daje jakieś błędy?