Tja, först och främst.. (och förlåt för det;) ) ANVÄND INTE CURSORER..och förlåt för kepsarna...
En av de värsta sakerna med markörer är att de kan låsa ditt bord. Vad jag alltid gör för dessa ändamål (och som är ganska snabbare), jag använder en for loop.. så här
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
För nästa del, har SQL Server-processen tillräcklig behörighet för att skriva till c:-enheten? Titta också in i meddelanderutan när du kör din kod, kanske du kan hitta något där?
Vad du också kan göra, försök att köra det manuellt. Skaffa bara en BCP-sats och kör den med xp_cmdshell. Ger det några fel?