Bom, a dúvida é bastante simples: como gerar arquivo texto por uma procedure.
Segue abaixo um exemplo que utilizo bastate.
Você tb pode cria uma dll em .net para gerar arquivo e registrar um assembly desta dll no sql server e chamar a funcao de dentro da proc, enfim. (procure por "CLR t-sql")
Aproveitando a oportunidade da thread se é bom ou não gerar arquivos de dentro do sql, acho mais vantagem do que desvantagem.
Suponhamos um cenário onde sua aplicação eh totalmente web e vc precise gerar 30mil xml (apenas um exemplo, mas meu caso real).
como faço? clico no botão e meu código fica executando? timeout na certa!. tenho um job que gera estes arquivos de tempos em tempos parametrizável de 500 em 500 por exemplo para não ocasionar uma lentidão do servidor ou por causa de IO ou consumo de memória ou processamento, etc. É claro que é um caso e existem outras formas de fazer como um windows services por exemplo.
Estou apenas acrescentando um cenário talvez não pensado pelo pessoal aqui.
Fica minha opinião e sugestão de código ao Pedro.
abs
declare
@id_file_sist int
,@id_arqv int
,@status int
,@src varchar(255)
,@desc varchar(255)
--cria objeto
exec @status = sp_OACreate
'Scripting.FileSystemObject'
,@id_file_sist OUTPUT
if @status <> 0 or @@error <> 0
begin
exec sp_OAGetErrorInfo
@id_file_sist
,@src OUT
,@desc OUT
select Source = @src
,Description = @desc
goto erro
end
-- Abrir arquivo
exec @status = sp_OAMethod
@id_file_sist
,'OpenTextFile'
,@id_arqv OUT
,'\\maquinaX\temp\teste.txt' -- lembre-se: o codigo está sendo executado no sevidor
-- portanto o caminho deve ser uma pasta compartilhada por exemplo
,2 -- 1: ForReading 2: ForWriting, 8: ForAppending
,1 -- indica se arquivo deve ser criado caso não exista: 0=false; 1=true.
if @status <> 0 or @@error <> 0
begin
exec sp_OAGetErrorInfo
@id_file_sist
,@src OUT
,@desc OUT
select Source = @src
,Description = @desc
goto erro
end
-- Grava o xml no arquivo de saida
exec @status = sp_OAMethod
@id_arqv
,'WriteLine'
,Null
,'aqui vai o texto do arquivo'
if @status <> 0 or @@error <> 0
begin
exec sp_OAGetErrorInfo
@id_file_sist
,@src OUT
,@desc OUT
select Source = @src
,Description = @desc
goto erro
end
-- Libera o arquivo
exec @status = sp_OADestroy
@id_arqv
if @status <> 0 or @@error <> 0
begin
exec sp_OAGetErrorInfo
@id_file_sist
,@src OUT
,@desc OUT
select Source = @src
,Description = @desc
goto erro
end
-- Libera o FileSystem
exec @status = sp_OADestroy
@id_file_sist
if @status <> 0 or @@error <> 0
begin
exec sp_OAGetErrorInfo
@id_file_sist
,@src OUT
,@desc OUT
select Source = @src
,Description = @desc
goto erro
end
goto fim
erro:
print 'Error'
fim:
print 'arquivo criado'