Welcome to Sign in | Help
in Search

TSQL to file text (from Phil Factor)

Last post 01-27-2010, 1:39 PM by maneaflorin@hotmail.com. 2 replies.
Sort Posts: Previous Next
  •  01-26-2010, 2:22 PM 8017

    TSQL to file text (from Phil Factor)

    Va salut,

    Tot studiind netul pentru a vedea cum se trimite rezultatul unui query intr-un fisier text, am descoperit (se pare) clasica
    procedura a dlui Phil Factor

    Insa procedura asta imi sterge tot fisierul text si pune rezultatul.
    Ce imi doresc este (si nu i-am dat de cap)  posibilitatea de a face sau append la fisier sau sa am fisierul gol inainte de rezultatul query-ului .
    Am atasat mai jos procedura unde am pus si un if unde am crezut ca ar fi linia esentiala pentru append sau write.Totusi se pare ca nu acolo
    ar fi.

    Aveti ceva sugestii, va rog?



    ALTER
    PROCEDURE [dbo].[spWriteStringToFile]
    (
    @String Varchar(max), --8000 in SQL Server 2000
    @Path VARCHAR(255),
    @Filename VARCHAR(100),
    @writeOrAppend bit -- parametru pentru alegere Write sau Append file

    --
    )
    AS
    DECLARE @objFileSystem int
    ,@objTextStream int,
    @objErrorObject int,
    @strErrorMessage Varchar(1000),
    @Command varchar(1000),
    @hr int,
    @fileAndPath varchar(80)

    set nocount on

    select @strErrorMessage='opening the File System Object'
    EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT

    Select @FileAndPath=@path+'\'+@filename
    if @HR=0 Select @objErrorObject=@objFileSystem , @strErrorMessage='Creating file "'+@FileAndPath+'"'

    if @HR=0 execute @hr = sp_OAMethod @objFileSystem , 'OpenTextFile', @objTextStream OUT, @FileAndPath,8,True

    ---------------------------------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------------------------------------
    -- probabil ca in loc de linia de deasupra ar trebui ceva ca mai jos unde 8 se pare ca e pt append si 2 pt write
    if
    @writeOrAppend=0 -- daca e 0 fac append, daca nu sterg fisierul ca sa fie curat
        if @HR=0 execute @hr = sp_OAMethod @objFileSystem , 'OpenTextFile', @objTextStream OUT, @FileAndPath,8,True
    else
        if @HR=0 execute @hr = sp_OAMethod @objFileSystem , 'CreateTextFile', @objTextStream OUT, @FileAndPath,2,True

    ----------------------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------------------


    if @HR=0 Select @objErrorObject=@objTextStream,
    @strErrorMessage='writing to the file "'+@FileAndPath+'"'
    if @HR=0 execute @hr = sp_OAMethod @objTextStream, 'Write', Null, @String

    if @HR=0 Select @objErrorObject=@objTextStream, @strErrorMessage='closing the file "'+@FileAndPath+'"'
    if @HR=0 execute @hr = sp_OAMethod @objTextStream, 'Close'

    if @hr<>0
    begin
    Declare
    @Source varchar(255),
    @Description Varchar(255),
    @Helpfile Varchar(255),
    @HelpID int

    EXECUTE sp_OAGetErrorInfo @objErrorObject,
    @source output,@Description output,@Helpfile output,@HelpID output
    Select @strErrorMessage='Error whilst '
    +coalesce(@strErrorMessage,'doing something')
    +', '+coalesce(@Description,'')
    raiserror (@strErrorMessage,16,1)
    end
    EXECUTE sp_OADestroy @objTextStream
    EXECUTE sp_OADestroy @objTextStream


  •  01-26-2010, 4:33 PM 8018 in reply to 8017

    Re: TSQL to file text (from Phil Factor)

    Daca am inteles bine tu vrei sa faci append la un fisier exsitent, cu continutul unui query sau sa golesti fisierul inainte de a pune date in el.
    Pentru ultima chestie poti folosi utilitarul bcp cu -c,creaza fisierul inainte de a pune date in el
    http://msdn.microsoft.com/en-us/library/ms162802.aspx
    Sau alta varianta mai complicata un pic folosesti Integration Services astfel:
    creezi un package cu un DataFLow in el care la randul lui contine un Oledbsource -ca sursa deintrare conectata la un flate file surse ca sursa de iesire iar fileflat surse are proprietate overwrite prin care poti suprascrie sau nu fisierul de iesire.
    Secolul XXI ori va fi religios ori nu va fi deloc
  •  01-27-2010, 1:39 PM 8022 in reply to 8018

    Re: TSQL to file text (from Phil Factor)

    Da, este corect. Asta vreau sa fac.
    O sa vad ce si cum, pt ca am reusit cumva sa obtin ceva rezultate cu procedura de mai sus combinata cumva cu ordinea instructiunilor din
    procedura mea.

    Multumesc pentru sfaturi!
    Best,
    F
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems