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...
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...
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 !
ou encore via xp_cmdshell ou en utilisant OLE.
Un petit exemple avec Ole :
A +
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
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/ * * * * *
Merci les gars !
Génial le script SQLpro
et Meilleurs Voeux pour 2006![]()
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...
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 :
Les variables fileHandle et fileId de ma fonction ne sont pas affectées -> 0
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
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
Problème corrigé
http://www.developpez.net/forums/sho...d.php?t=162364
Partager