Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2011, 17h24   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 22
Points : 3
Points : 3
Par défaut passer un nom de table en parametre

Bonjour,

j'ai un fichier csv que je veux intégrer dans une base sql. j'utilise donc le bulk insert pour rapatrier mes données.
Pour un seul fichier ca marche très bien

Maintenant, je voudrais pouvoir à l'aide d'une seule procédure stockée, récupérer le bon fichier associé et le mettre dans la table de destination associée (fichier 1 dans table 1, fichier 2 dans table 2...)
je voudrais donc savoir comment je peux passer en paramètre le nom de la table SQL associée au fichier que je veux intégrer.

merci d'avance pour votre aide.
fred19732 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 23h08   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Il suffit de faire du SQL dynamique et de l'exécuter par EXEC (...) ou sp_executeSQL.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 23h32   #3
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 138
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 138
Points : 2 466
Points : 2 466
Envoyer un message via Yahoo à zinzineti
Tu peux t'inspirer de ceci :


Code :
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
 
--========================================================
--Description : import de fichier .csv dans une table à l'aide de BULK INSERT
--Auteur : Etienne ZINZINDOHOUE
--Exemple :
	EXEC proc_importBULK_CSV_to_Table N'E:\test.csv', N'maBase.dbo.testbulk'
--========================================================
CREATE PROCEDURE proc_importBULK_CSV_to_Table
	@EmplacementFichier nvarchar(255), @BaseSchemaTableName nvarchar(255)
AS
BEGIN
	SET NOCOUNT ON
	-- Vérifier l'existence du fichier à importer
	DECLARE @ErreurTable VARCHAR(255)
	DECLARE	@tb_directory_exists TABLE
	(
		 file_exists bit
		, file_is_a_directory bit
		, parent_directory_exists bit
	)	
	INSERT	@tb_directory_exists
	EXEC	xp_fileexist @EmplacementFichier
	IF EXISTS
	(
		SELECT	file_exists
		FROM	@tb_directory_exists
		WHERE	file_exists = 0
	)
	BEGIN
		RAISERROR('Le fichier "%s" n''existe pas. Vérifier d''abord l''existence du fichier que vous voulez importer.', 16, 1, @EmplacementFichier)
		RETURN
	END
	-- Vérifier la présence de la table de destination 
	IF EXISTS
	(
	SELECT COUNT(*) 
	FROM INFORMATION_SCHEMA.TABLES 
	WHERE TABLE_CATALOG +'.'+ TABLE_SCHEMA +'.'+TABLE_NAME = + @BaseSchemaTableName
	HAVING COUNT(*) = 0
	)
	BEGIN
	SET @ErreurTable = 'La table ' + @BaseSchemaTableName + ' n''existe pas !'
		RAISERROR(@ErreurTable, 16, 1, @BaseSchemaTableName)
		RETURN
	END
	DECLARE @bulk nvarchar(1024)
	BEGIN
	    SET	@bulk = N'BULK INSERT ' + @BaseSchemaTableName + ' FROM ' +''''+ @EmplacementFichier  +''''+ ' WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1)'
    	--PRINT @bulk
		EXEC(@bulk)
	END
END
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h52.


 
 
 
 
Partenaires

Hébergement Web