Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Exportieren von Binärdateidaten (Bildern) aus SQL über eine gespeicherte Prozedur

Nun, zuallererst ... (und das tut mir leid;) ) VERWENDEN SIE KEINE CURSORS ... und entschuldigen Sie die Großbuchstaben ...

Eines der schlimmsten Dinge an Cursorn ist, dass sie Ihren Tisch sperren können. Was ich für diese Zwecke immer mache (und was ziemlich schneller ist), verwende ich eine for-Schleife ... wie diese

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

Verfügt der SQL Server-Prozess für den nächsten Teil über ausreichende Berechtigungen, um auf Laufwerk c:zu schreiben? Schauen Sie auch in Ihr Nachrichtenfenster, wenn Sie Ihren Code ausführen, vielleicht finden Sie dort etwas?

Was Sie auch tun können, versuchen Sie es manuell auszuführen. Holen Sie sich einfach eine BCP-Anweisung und führen Sie sie mit der xp_cmdshell aus. Gibt es irgendwelche Fehler?