IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Ecrire dans un fichier


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Par défaut Ecrire dans un fichier
    Bonjour,

    Ma question est simple : Est-il possible d'écrire dans un fichier à l'aide d'une procédure/fonction/trigger en T-SQL ?

    Merci d'avance et JOYEUSES FÊTES...

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Oui, via bulckcopy
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    ou encore via xp_cmdshell ou en utilisant OLE.

    Un petit exemple avec Ole :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    CREATE PROCEDURE P_FILE_OPEN @NOM_FICHIER NVARCHAR(256),
                                 @FILE_HANDLE INTEGER OUTPUT,
                                 @FILE_ID     INTEGER OUTPUT
     
    AS
     
    /**********************************************************************
    * MANIPULATION DE FICHIER PAR OLE SOUS MS SQL SERVER 2000 - CREATE F  *
    ***********************************************************************
    * FREDERIC BROUARD   -  2006-01-02  -   http://sqlpro.developpez.com  *
    **********************************************************************/
     
    SET NOCOUNT ON
     
    DECLARE @OLEHDL INTEGER
     
    -- création de l'objet OLE d'écriture en fichier
    EXECUTE @OLEHDL = sp_OACreate 'Scripting.FileSystemObject', 
                                  @FILE_HANDLE OUT
    IF @OLEHDL <> 0  
    BEGIN
       RAISERROR('Le fichier %s n''a pu être créé', 16, 1, @NOM_FICHIER)
       RETURN
    END
     
    -- ouverture du fichier en écriture
    EXECUTE @OLEHDL = sp_OAMethod @FILE_HANDLE, 
                                  'OpenTextFile', 
                                  @FILE_ID OUT, 
                                  @NOM_FICHIER, 
                                  2, 
                                  1
    IF @OLEHDL <> 0 
    BEGIN
       RAISERROR('Le fichier %s n''a pu être ouvert en écriture', 16, 1, @NOM_FICHIER)
       RETURN
    END
    GO
     
     
    CREATE PROCEDURE P_FILE_WRITELINE @FILE_ID  INTEGER,
                                      @NEW_LINE NVARCHAR(4000)
    AS
     
    /**********************************************************************
    * MANIPULATION DE FICHIER PAR OLE SOUS MS SQL SERVER 2000 - WRITE_LN  *
    ***********************************************************************
    * FREDERIC BROUARD   -  2006-01-02  -   http://sqlpro.developpez.com  *
    **********************************************************************/
     
     
    SET NOCOUNT ON
     
    DECLARE @OLEHDL  int
     
    -- insère la nouvelle ligne dans le fichier
     
    EXECUTE @OLEHDL = sp_OAMethod @FILE_ID, 
                                  'WriteLine', 
                                  Null,
                                  @NEW_LINE
    IF @OLEHDL <> 0 
    BEGIN
       RAISERROR('Le fichier d''identifiant %d n''a pu être créé', 16, 1, @FILE_ID)
       RETURN
    END
    GO
     
     
    CREATE PROCEDURE P_FILE_CLOSE @FILE_HANDLE INTEGER,
                                  @FILE_ID     INTEGER
    AS
     
    /**********************************************************************
    * MANIPULATION DE FICHIER PAR OLE SOUS MS SQL SERVER 2000 - CLOSE F   *
    ***********************************************************************
    * FREDERIC BROUARD   -  2006-01-02  -   http://sqlpro.developpez.com  *
    **********************************************************************/
     
    SET NOCOUNT ON
     
    DECLARE @OLEHDL  int
     
    -- fermeture du fichier
    EXECUTE @OLEHDL = sp_OADestroy @FILE_ID
    IF @OLEHDL <> 0 
    BEGIN
       RAISERROR('Le fichier d''identifiant %d n''a pu être fermé', 16, 1, @FILE_ID)
       RETURN
    END
    EXECUTE @OLEHDL = sp_OADestroy @FILE_HANDLE
    IF @OLEHDL <> 0 
    BEGIN
       RAISERROR('L''objet d''accès au fichier d''identifiant %d n''a pu être détruit', 16, 1, @FILE_ID)
       RETURN
    END
     
    GO
     
     
    /* test */
     
      DECLARE @FHDL INTEGER
      DECLARE @FID  INTEGER
      DECLARE @LINE NVARCHAR(4000)
     
      EXEC P_FILE_OPEN 'C:\temp\!coucou.txt', @FHDL OUTPUT, @FID OUTPUT
     
      SET @LINE =  '*** TEST ÉCRITURE ***'
      EXEC P_FILE_WRITELINE @FID, @LINE
     
      SET @LINE = CAST(CURRENT_TIMESTAMP AS VARCHAR(32))
      EXEC P_FILE_WRITELINE @FID, @LINE
     
      EXEC P_FILE_CLOSE @FHDL, @FID
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre confirmé Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Par défaut
    Merci les gars !

    Génial le script SQLpro

    et Meilleurs Voeux pour 2006

  5. #5
    Membre confirmé Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Par défaut
    Encore une p'tite question :

    Si je veux que dans le cas ou mon fichier existe déjà, le script ne l'écrase pas mais qu'il ecrive à la suite. Comment dois-je faire ?

    Je me suis penché sur "sp_OACreate", "sp_OAMethod" et "Scripting.FileSystemObject" parce que j'imagine que la réponse se trouve par là mais je n'ai pas trouvé grand chose...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Par défaut
    +1. Si quelqu'un savait, je vote pour.

  7. #7
    Membre éclairé

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Par défaut
    Je remonte le sujet car j'ai un petit soucis (en espérant poster dans le bon forum .. j'ai hésité )

    Je tente d'utiliser la procédure stockée P_FILE_OPEN via VB.net.
    Le problème est que je n'arrive pas à récupérer les variables de sortie (FILE_HANDLE et FILE_ID) depuis mon code vb

    Quelqu'un pourrait-il m'aider ?

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        Private Sub CreerFichierSurServeur(ByVal nomFichier As String, ByRef fileHandle As Integer, ByRef fileId As Integer)
            Dim command As New SqlCommand()
     
            command = Sql.prepareStoredProcedure("P_FILE_OPEN", c)
            Try
                command.Parameters.Add("@NOM_FICHIER", SqlDbType.NVarChar, 256)
                command.Parameters.Add("@FILE_HANDLE", SqlDbType.Int)
                command.Parameters.Add("@FILE_ID", SqlDbType.Int)
                command.Parameters(0).Value = nomFichier
                command.Parameters(1).Value = fileHandle
                command.Parameters(2).Value = fileId
     
                command.ExecuteNonQuery()
                command.Dispose()
     
            Catch ex As Exception
                MsgBox("Connexion impossible à la base de données", MsgBoxStyle.Critical)
            End Try
        End Sub
    Les variables fileHandle et fileId de ma fonction ne sont pas affectées -> 0
    Comment dois-je m'y prendre ?

    PS : le fichier est bien créé ..
    PS 2 : la variable c est du type SqlConnection et est bien créée ailleurs ... la connexion existe

  8. #8
    Membre éclairé

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo