Е, първо.. (и съжалявам за това;) ) НЕ ИЗПОЛЗВАЙТЕ КУРСОРИ..и съжалявам за главните букви...
Едно от най-лошите неща за курсорите е, че те могат да заключат вашата маса. Това, което винаги правя за тези цели (и което е доста по-бързо), използвам 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 израз и го изпълнете с xp_cmdshell. Дава ли някакви грешки?