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

Développement SQL Server Discussion :

Probleme BULK INSERT - Procédure Stockée - TSQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut Probleme BULK INSERT - Procédure Stockée - TSQL
    Bonjour,

    Je rencontre à ce jour un problème dans mon code concernant l'import de fichier avec BULK INSERT.

    En effet j'ai des fichiers à traiter avec pas mal de lignes dans ces fichiers.

    Le problème est que quand je veux faire mon bulk insert il ne m'insert que les lignes d'un fichier dans ma table temporaire..

    Alors que ce que je voudrais c'est retrouver l'ensemble des lignes de tous les fichiers dans cette table temporaire.

    Voici mon code : ( pour info j'ai deux fichiers dont 1 avec 2 lignes et le deuxieme avec 4 lignes et je retrouves uniquement les 4 lignes de mon deuxième fichier.. )

    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
     
    	/**********************************************************/
    	/*************** 3) TRAITEMENT DES FICHIERS ***************/
    	/**********************************************************/
     
    DECLARE CLISTEFICHIER CURSOR
    		LOCAL STATIC READ_ONLY FORWARD_ONLY
    	FOR 
    	SELECT FichierCheminComplet FROM #ListeFiles
    	OPEN CLISTEFICHIER
    	FETCH NEXT FROM CLISTEFICHIER INTO @FichierCheminComplet
    	WHILE @@FETCH_STATUS=0
    	BEGIN
    		IF @TespSP =1 select 'new'
     
    		/***Creation de la table temporaire #ImportHeppner listant les données a envoyer vers la table tblHeppner***/
    		IF  EXISTS (SELECT * FROM tempdb.sys.objects WHERE [Name] like '#ImportHeppner%' AND type in (N'U')) DROP TABLE #ImportHeppner
    		CREATE TABLE  #ImportHeppner ([Ligne] [nvarchar](max)) 
    	--	select * from #ImportHeppner
     
    		IF  LEN(@FichierCheminComplet) > 0
    			BEGIN
     
    			SET @BULK = 'BULK '
    			SET @BULK += 'INSERT #ImportHeppner '
    			SET @BULK += 'FROM ''' + @FichierCheminComplet +''' '
    			SET @BULK += 'WITH ( '
    			SET @BULK += '	FIRSTROW = 1, '
    			SET @BULK += '	ROWTERMINATOR = ''0x0a'', '
    			SET @BULK += '	CODEPAGE = ''ACP'' '
    			SET @BULK += ')'
     
    			EXEC (@BULK)
     
    	--	SET @CMD = 'move "' + @FichierCheminComplet + '" "' + @DestinationFolder + '"';
    	--	EXEC xp_cmdshell @CMD
     
    		END
    	FETCH NEXT FROM CLISTEFICHIER INTO @FichierCheminComplet
    	END
    CLOSE CLISTEFICHIER
    DEALLOCATE CLISTEFICHIER
    Merci pour votre aide...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 : 22 009
    Billets dans le blog
    6
    Par défaut
    Vous supprimez la table à chaque tour de boucle....

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

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut Aide Import BULK INSERT
    Bonjour,

    merci pour votre réponse.. C'était bien ça..

    Par contre j'ai un autre problème lors de mon bulk insert il m'insert le contenu du fichier dans ma table, cependant j'aimerai que pour chacune des lignes importés le nom du fichier est intégré dans ma colonne nom fichier.

    ( voir ci-joint )

    Pour être plus clair j'aimerai que dans la colonne NomFICHIER s'inscrit le nom du fichier et dans les autres colonnes les valeurs de chacune des lignes de mon fichier..

    Merci pour votre aide
    Images attachées Images attachées  

  4. #4
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    Bonjour,

    Après ton BULK, tu executes une requete UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE #ImportHeppner SET NomFichier= @FichierCheminComplet WHERE NomFichier IS NULL

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut
    Bonjour,

    Merci pour votre réponse mais cela ne marche pas...

    Voici l'intégral de 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
    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    ALTER PROCEDURE [dbo].[HPNIntegration] 
     
    AS
    BEGIN
     
    	DECLARE @TespSP bit = 0
    	-- DECLARE @TespSP bit = 1
     
    	DECLARE @SourceFolder nvarchar(128)
    	DECLARE @DestinationFolder nvarchar(128)
    	DECLARE @SourceFile nvarchar(128)
    	DECLARE @BULK nvarchar(max)
    	DECLARE @fileExist int
    	DECLARE @MasqueNomFichier nvarchar(249)
    	DECLARE @FichierCheminComplet nvarchar(249)
    	DECLARE @LigneFichier nvarchar(max)
    	DECLARE @CaractereFinLigne nvarchar(249)
    	DECLARE @CMD varchar(500)
     
    	DECLARE @NomFICHIER nvarchar(255)
    	DECLARE @NumCEGID nvarchar(55)
    	DECLARE @DateStatut datetime	
    	DECLARE @Code  nvarchar(55)
    	DECLARE @EnvoiEmail_id  nvarchar(max)
    	DECLARE @DateCree datetime
    	DECLARE @DateModif datetime
     
     
     
     
     
     
     
    	SET @SourceFolder = 'D:\DataFlow\Heppner\In\'
    	SET @DestinationFolder = 'D:\DataFlow\Heppner\done\'
     
     
    	/**********************************************************************************/
    	/*************** 1) CREATION DES TABLES TEMPORAIRES ***************/
    	/**********************************************************************************/
     
    	/***Creation de la table temporaire #ListeFiles listant les fichiers a integrer***/
    	IF  EXISTS (SELECT * FROM tempdb.sys.objects WHERE [Name] like '#ListeFiles%' AND type in (N'U')) DROP TABLE #ListeFiles
    	CREATE TABLE #ListeFiles (FichierCheminComplet nvarchar(249),NomFichier nvarchar(249))
     
    		IF  EXISTS (SELECT * FROM tempdb.sys.objects WHERE [Name] like '#ImportHeppner%' AND type in (N'U')) DROP TABLE #ImportHeppner
    		CREATE TABLE  #ImportHeppner ([Ligne] [nvarchar](max)) 
     
     
    	/**********************************************************************************/
    	/*************** 2) RECUPERATION DE LA LISTE DES FICHIERS HEPPNER A TRAITER ***************/
    	/**********************************************************************************/
     
    		SET @MasqueNomFichier = '%'
     
    	/**Creation d'une table temporaire #DirectoryTree qui va contenir la liste de tous les fichiers qui se trouve dans un dossier**/
    		IF  EXISTS (SELECT * FROM tempdb.sys.objects WHERE [Name] like '#DirectoryTree%' AND type in (N'U')) DROP TABLE #DirectoryTree	
    		CREATE TABLE #DirectoryTree ( id int IDENTITY(1,1), SubDirectory nvarchar(249),Depth int,IsFile bit)
     
    	/**Injection dans #DirectoryTree avec la liste des fichiers se trouvant dans le dossier contenant la copie des fichier Heppner pour le fichier courant**/
    		INSERT INTO #DirectoryTree (SubDirectory, Depth, IsFile) EXEC master.sys.xp_dirtree @SourceFolder,1,1
     
    		/**Boucle permettant de récupérer uniquement les fichiers se trouvant au niveau du dossier courant (pas les sous dossiers) et dont le nom ressemble au masque adapté à la situation**/
    		DECLARE CSUBLISTEFICHIER CURSOR
    			LOCAL STATIC READ_ONLY FORWARD_ONLY
    		FOR 
    		SELECT SubDirectory FROM #DirectoryTree WHERE SubDirectory like @MasqueNomFichier AND IsFile = 1 AND Depth = 1
    		OPEN CSUBLISTEFICHIER
    		FETCH NEXT FROM CSUBLISTEFICHIER INTO @NomFichier
    		WHILE @@FETCH_STATUS = 0
    		BEGIN
    			IF (RIGHT(@SourceFolder,1) = '\') SET @FichierCheminComplet = @SourceFolder + @NomFichier
    			INSERT INTO #ListeFiles VALUES (@FichierCheminComplet, @NomFICHIER)
    			FETCH NEXT FROM CSUBLISTEFICHIER INTO @NomFichier
    --			select * from #ListeFiles
    		END
    		CLOSE CSUBLISTEFICHIER
    		DEALLOCATE CSUBLISTEFICHIER	
     
    		/**Fin Boucle**/
    	/**********************************************************/
    	/*************** 3) TRAITEMENT DES FICHIERS ***************/
    	/**********************************************************/
     
    DECLARE CLISTEFICHIER CURSOR
    		LOCAL STATIC READ_ONLY FORWARD_ONLY
     
    	FOR 
    	SELECT FichierCheminComplet FROM #ListeFiles
    	OPEN CLISTEFICHIER
    	FETCH NEXT FROM CLISTEFICHIER INTO @FichierCheminComplet
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    		IF @TespSP =1 select 'new'
     
    		/***Creation de la table temporaire #ImportHeppner listant les données a envoyer vers la table tblHeppner***/
    	--	select * from #ImportHeppner
    			BEGIN
     
    			SET @BULK = 'BULK '
    			SET @BULK += 'INSERT #ImportHeppner '
    			SET @BULK += 'FROM ''' + @FichierCheminComplet +''' '
    			SET @BULK += 'WITH ( '
    			SET @BULK += '	FIRSTROW = 1, '
    			SET @BULK += '	ROWTERMINATOR = ''0x0a'', '
    			SET @BULK += '	CODEPAGE = ''ACP'' '
    			SET @BULK += ')'
     
    			EXEC (@BULK)
     
    --			INSERT INTO #ImportHeppner(NomFichier) Values(@NomFICHIER)
     
    	--	SET @CMD = 'move "' + @FichierCheminComplet + '" "' + @DestinationFolder + '"';
    	--	EXEC xp_cmdshell @CMD
     
     
    		DECLARE MY_CURSOR CURSOR
    			LOCAL STATIC READ_ONLY FORWARD_ONLY
     
    		FOR 
     
    		SELECT [ligne] FROM #ImportHeppner 
     
    		OPEN MY_CURSOR
    		FETCH NEXT FROM MY_CURSOR INTO @LigneFichier
    		WHILE @@FETCH_STATUS = 0
    		BEGIN
    			IF( SELECT COUNT(*) FROM [Pivot].[dbo].[dlHeppnerFiles] WHERE NomFICHIER = @LigneFichier) = 0
    				BEGIN
    					INSERT INTO Pivot.dbo.dlHeppnerFiles
    					SELECT DISTINCT null
    							,SUBSTRING(ligne,1,6) AS NumCEGID
    							,CONVERT(datetime,(SUBSTRING(Ligne,38,6)),103) AS DateStatut								
    							,SUBSTRING(ligne,44,54) AS Code
    							, NULL
    							,GETDATE()
    							,DateModif=NULL
    							,DateTrsCRM=NULL
    					FROM #ImportHeppner 
    					WHERE @LigneFichier = Ligne 
     
     
    					UPDATE dlHeppnerFiles SET NomFichier= @NomFICHIER WHERE NomFichier IS NULL
     
     
    				end
    			--		truncate table dlHeppnerFiles
    			--		select * from dlHeppnerFiles
     
    				FETCH NEXT FROM MY_CURSOR INTO @LigneFichier
    				END
    		CLOSE MY_CURSOR
    		DEALLOCATE MY_CURSOR
    	END




    Citation Envoyé par HULK Voir le message
    Bonjour,

    Après ton BULK, tu executes une requete UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE #ImportHeppner SET NomFichier= @FichierCheminComplet WHERE NomFichier IS NULL

  6. #6
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    si ca ne marche pas, soit il n'y a rien dans @NomFichier, soit ta colonne n'est pas à NULL

Discussions similaires

  1. probleme bulk insert
    Par ryassinne dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/08/2011, 08h44
  2. Execution INSERT procédure stockée
    Par Aizen64 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/04/2008, 22h15
  3. [Procédure stockée]Insert avec renvoi clé primaire?
    Par busmik dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/08/2004, 17h14
  4. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 19h30
  5. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 10h34

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