Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Exportando dados de arquivos binários (imagens) do SQL por meio de um procedimento armazenado


Bem, antes de mais nada.. (e desculpe por isso;) ) NÃO USE CURSORES..e desculpe pelas maiúsculas...

Uma das coisas mais ruins sobre os cursores é que eles podem bloquear sua mesa. O que eu sempre faço para esses propósitos (e que é bem mais rápido), eu uso um loop for .. assim
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

Para a próxima parte, o processo do SQL Server tem permissão suficiente para gravar na unidade c:? Além disso, olhe para o seu painel de mensagens ao executar seu código, talvez você possa encontrar algo lá?

O que você também pode fazer, tente executá-lo manualmente. Basta obter uma instrução BCP e executá-la com o xp_cmdshell. Dá algum erro?