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 :

SQL SERVER 2005 - Export tables en CSV


Sujet :

MS SQL Server

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 289
    Par défaut SQL SERVER 2005 - Export tables en CSV
    Bonjour tout le monde,

    J'ai une cinquantaine de tables à exporter de SQL vers CSV. Comment faire pour automatiser l'export SVP.

    Merci.

    ash_rmy.

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    Quelle version de SQL Server ?

    ++

  3. #3
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    C'est du SQL SERVER 2005, mais pour plus de d'info sur l'édition. Donne nous le résultat de cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion
     
    ,SERVERPROPERTY('ProductLevel') AS ProductLevel
     
    ,SERVERPROPERTY('Edition') AS Edition
     
    ,SERVERPROPERTY('EngineEdition') AS EngineEdition
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 997
    Billets dans le blog
    6
    Par défaut
    utilisez bcp.exe ou SSIS.

    Pour bcp vous pouvez le faire sure toutes vos tables via du SQL dynamique appelant la procédure xp_cmdshell.

    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/ * * * * *

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez faire cela à l'aide de l'utilitaire BCP et d'une table contenant le nom des tables à exporter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE bcp_tables_to_export_in_CSV_file
    (
    	table_name sysname CONSTRAINT PKbcp_tables_to_export_in_CSV_file PRIMARY KEY
    	, exported bit NOT NULL CONSTRAINT DFbcp_tables_to_export_in_CSV_file DEFAULT 0
    )
    Ajouter le nom des tables comme suit pour chacune d'entre-elles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT	bcp_tables_to_export_in_CSV_file (table_name) VALUES ('maTable')
    Ceci fonctionne pour le cas où toutes les tables sont dans le même schéma, par défaut dbo.

    Utilisez ensuite la procédure stockée suivante :

    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
    ALTER PROCEDURE proc_export_tables_to_CSV_file
    	@_export_file nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checkiing directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	DECLARE	@directory nvarchar(255)
    	SELECT	@directory = LEFT(@_export_file, LEN(@_export_file)-  CHARINDEX('\', REVERSE(@_export_file)))
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @directory
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does not exist. Create it before executing this procedure.', 16, 1, @directory)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name
    			+ ' out "' + @_export_file + '" -c -T -t, –S' + @@SERVERNAME
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    	END
    END
    @++

  6. #6
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    @ elsuket
    Très bonne idée

    Sur une instance par défaut ça marche nickel, mais sur une instance nommée, il y a un petit souci sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' out "' + @_export_file + '" -c -T -t, –S' + @@SERVERNAME
    Que j'ai remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' out "' + @_export_file + '" -c -T -t, -S ' +'"'+ @@SERVERNAME +'"'
    ça me donne des idées pour faire de cette manière là des imports.

    Thanks
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Pour SSIS aussi (ben oui faut bien donner toutes les solutions ) il suffit de faire un script qui liste l'ensemble de vos tables et integrer cela dans un foreach loop qui exportera les donnees de vos tables une a une.

    ++

  8. #8
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Encore un correctif,

    Description du bug
    ------------------
    Lorsqu'il y a plus d'une ligne dans la table bcp_tables_to_export_in_CSV_file il y a une boucle infinie sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    SET	exported = 1


    Correctif
    ------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    SET	exported = 1
    WHERE	exported = 0

    Procédure stockée après correction
    --------------------------------

    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
    ALTER PROCEDURE proc_export_tables_to_CSV_file
    	@_export_file nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checkiing directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	DECLARE	@directory nvarchar(255)
    	SELECT	@directory = LEFT(@_export_file, LEN(@_export_file)-  CHARINDEX('\', REVERSE(@_export_file)))
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @directory
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does NOT exist. CREATE it before executing this procedure.', 16, 1, @directory)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name
    			+ ' out "' + @_export_file + '" -c -T -t, -S ' +'"'+ @@SERVERNAME +'"'
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    		WHERE exported = 0
    	END
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  9. #9
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    3ème BUG : Description
    ---------------

    L'ajout (APPEND) dans le fichier de sortie ne s'effectue pas.
    le dernier export de la dernière table écrase les données existant dans le fichier.
    Résultat : le fichier contient uniquement les données de la dernière table exportée


    Correction
    ----------------------

    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
    ALTER PROCEDURE proc_export_tables_to_CSV_file
    	@_export_file nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checkiing directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	DECLARE	@directory nvarchar(255)
    	SELECT	@directory = LEFT(@_export_file, LEN(@_export_file)-  CHARINDEX('\', REVERSE(@_export_file)))
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @directory
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does NOT exist. CREATE it before executing this procedure.', 16, 1, @directory)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
    	DECLARE @_export_file_temp varchar(1024)
    	DECLARE @append varchar(1024)
    	SET @_export_file_temp = 'c:\temp\file_temp.csv'
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
     
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + @_export_file_temp  +'" -c -T -t, -S ' +'"'+ @@SERVERNAME +'" ' 
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		-- Ajout dans le fichier de sortie (Ajouté par zinzineti)
    		SET @append = 'type ' + @_export_file_temp + ' >> ' +  @_export_file 
    		EXEC master..xp_cmdshell @append
    		-- MAJ table des tables (Modifiée par zinzineti)
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    		WHERE exported = 0
    	END
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Merci pour lé débuggage Zinzineti

    On peut aussi penser à exporter avec un fichier par table, ce qui fait que l'on peut se passer de l'append :

    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
    ALTER PROCEDURE proc_export_tables_to_CSV_file
    	@_directory_path nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checking directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @_directory_path
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does not exist. Create it before executing this procedure.', 16, 1, @_directory_path)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
    		, @export_file_temp varchar(1024)
    		, @append varchar(1024)
    		, @table_name sysname
     
    	SET	@_export_file_temp = @directory + '\file_temp' + @file_extension
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
     
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + table_name  + '.csv" -c -T -t, -S ' + '"' + @@SERVERNAME + '"' 
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		-- MAJ table des tables (Modifiée par zinzineti)
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    		WHERE	exported = 0
    	END
    END
    Et donc d'écrire une procédure stockée de chargement des données à partir des fichiers, à l'aide de BULK INSERT, puisqu'il est fort probable que les tables n'aient pas la même structure.

    @++

  11. #11
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par elsuket Voir le message
    On peut aussi penser à exporter avec un fichier par table, ce qui fait que l'on peut se passer de l'append :

    Et donc d'écrire une procédure stockée de chargement des données à partir des fichiers, à l'aide de BULK INSERT, puisqu'il est fort probable que les tables n'aient pas la même structure.

    @++
    Oui c'est ce que je pense aussi, vu que la demande initiale de ash_rmy
    est :
    ash_rmy
    J'ai une cinquantaine de tables à exporter de SQL vers CSV. Comment faire pour automatiser l'export SVP.

    J'ai relevé des coquilles dans le script que tu proposes pour cette opération :

    1.) les paramètres suivants sont inutiles :
    --> @directory
    --> @export_file_temp
    --> @_export_file_temp (celui-ci n'était pas déclaré !)
    --> @append

    2.) la ligne suivante est inutile :

    --> SET @_export_file_temp = @_directory_path + '\file_temp' + @file_extension


    3.) J'ai remplacé la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + table_name  + '.csv" -c -T -t, -S ' + '"' + @@SERVERNAME + '"'
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + @_directory_path + table_name  + '.csv" -c -T -t, -S ' + '"' + @@SERVERNAME + '"'

    Et finalement

    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
    /*
    EXEC proc_export_tables_to_CSV_file 'E:\'
    */
    ALTER PROCEDURE proc_export_tables_to_CSV_file
    	@_directory_path nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checking directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @_directory_path
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does not exist. Create it before executing this procedure.', 16, 1, @_directory_path)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
    	--	, @export_file_temp varchar(1024) (modifié par zinzineti)
    	--	, @append varchar(1024)           (modifié par zinzineti)
    		, @table_name sysname
     
    	--SET	@_export_file_temp = @_directory_path + '\file_temp' + @file_extension   (modifié par zinzineti)
     
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
    	    --(modifié par zinzineti)
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + @_directory_path + table_name  + '.csv" -c -T -t, -S ' + '"' + @@SERVERNAME + '"' 
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		-- MAJ table des tables (Modifiée par zinzineti)
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    		WHERE	exported = 0
    	END
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  12. #12
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Décidément les vacances me sont bien nécessaires !
    Encore merci et Joyeux Noël à toi

    @++

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 289
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    C'est du SQL SERVER 2005, mais pour plus de d'info sur l'édition. Donne nous le résultat de cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion
     
    ,SERVERPROPERTY('ProductLevel') AS ProductLevel
     
    ,SERVERPROPERTY('Edition') AS Edition
     
    ,SERVERPROPERTY('EngineEdition') AS EngineEdition
    Bonjour tout le monde,

    merci beaucoup pour votre aide.

    Déjà en exécutant la requête ci-dessous, voici ce que j'ai :

    ProductVersion = 9.00.3073.00
    ProductLevel = SP2
    Edition = Enterprise Edition (64-bit)
    EngineEdition = 3

    Quand j'exécute la procédure proc_export_tables_to_CSV_file, il m'affiche en erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom d'objet 'proc_export_tables_to_CSV_file' non valide.
    merci pour votre aide.

    ash_rmy.

  14. #14
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par ash_rmy Voir le message
    Quand j'exécute la procédure proc_export_tables_to_CSV_file, il m'affiche en erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom d'objet 'proc_export_tables_to_CSV_file' non valide.
    merci pour votre aide.

    ash_rmy.
    Il faut d'abord créer la procédure avant de l'exécuter. remplace le "ALTER" par "CREATE". Voir ci-dessous

    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
    /*
    EXEC proc_export_tables_to_CSV_file 'E:\'
    */
    CREATE PROCEDURE proc_export_tables_to_CSV_file
    	@_directory_path nvarchar(255)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	-- Checking directory existence
    	DECLARE	@tb_directory_exists TABLE
    	(
    		file_exists bit
    		, file_is_a_directory bit
    		, parent_directory_exists bit
    	)
     
    	INSERT	@tb_directory_exists
    	EXEC	xp_fileexist @_directory_path
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	@tb_directory_exists
    		WHERE	file_is_a_directory = 0
    	)
    	BEGIN
    		RAISERROR('The "%s" directory does not exist. Create it before executing this procedure.', 16, 1, @_directory_path)
    		RETURN
    	END
     
    	-- Proceeding export
    	UPDATE	dbo.bcp_tables_to_export_in_CSV_file
    	SET	exported = 0
     
    	DECLARE @bcp varchar(1024)
    	--	, @export_file_temp varchar(1024) (modifié par zinzineti)
    	--	, @append varchar(1024)           (modifié par zinzineti)
    		, @table_name sysname
     
    	--SET	@_export_file_temp = @_directory_path + '\file_temp' + @file_extension   (modifié par zinzineti)
     
     
    	WHILE EXISTS
    	(
    		SELECT	*
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
    	)
    	BEGIN
    	    --(modifié par zinzineti)
    		SELECT	TOP (1) @bcp = 'BCP ' + DB_NAME() + '.dbo.' + table_name + ' out "' + @_directory_path + table_name  + '.csv" -c -T -t, -S ' + '"' + @@SERVERNAME + '"' 
    		FROM	dbo.bcp_tables_to_export_in_CSV_file
    		WHERE	exported = 0
     
    		PRINT	@bcp
     
    		EXEC	xp_cmdshell @bcp
     
    		-- MAJ table des tables (Modifiée par zinzineti)
    		UPDATE	TOP (1) dbo.bcp_tables_to_export_in_CSV_file
    		SET	exported = 1
    		WHERE	exported = 0
    	END
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 289
    Par défaut
    merci beaucoup pour votre aide. ça marche

    ash_rmy.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2010, 08h39
  2. sql server 2005 creation table sur base miroir
    Par s0080223 dans le forum Développement
    Réponses: 3
    Dernier message: 08/01/2010, 14h57
  3. [SQL Server 2005]Export resultat d'une requête
    Par Piolet dans le forum Développement
    Réponses: 26
    Dernier message: 11/11/2008, 13h25
  4. SQL server 2005 : ALTER TABLE
    Par narutoland62 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/12/2007, 13h38
  5. [SQL SERVER 2005] Exporter une table en Access
    Par Golzinne dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/03/2007, 17h08

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