Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esportazione di dati di file binari (immagini) da SQL tramite una procedura memorizzata

Bene, prima di tutto.. (e scusami;) ) NON UTILIZZARE I CURSORI..e scusa per i maiuscoli...

Una delle cose più brutte dei cursori è che possono bloccare la tua tabella. Quello che faccio sempre per questi scopi (e che è abbastanza più veloce), uso un ciclo for.. come questo

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

Per la parte successiva, il processo di SQL Server dispone di autorizzazioni sufficienti per scrivere sull'unità c:? Inoltre, guarda nel riquadro dei messaggi quando esegui il codice, forse puoi trovare qualcosa lì?

Quello che puoi fare anche tu, prova ad eseguirlo manualmente. Basta ottenere un'istruzione BCP ed eseguirla con xp_cmdshell. Dà qualche errore?