Hello à tous
je suis entrain de bosser sur des importations de données de fichier plat vers notre serveur SQL.
Je récupère un fichier Txt que j'importe dans une table temporaire TMP_maTable. ====>BULKINSERT
Puis je creer une procedure stockee qui va parcourir tout les enregistrement de cette table TMP_maTable et faire des INSERTS / UPDATE dans mes tables destination, en récupérant au passage les différentes clés étrangères dont ma table de destination pourrait avoir besoin....en faisant des mise à jour ou des insert dans d'autre tables liées, etc....
Il arrive sur certaine table qu'un insert declenche l'execution d'un trigger, et il faut que cela soit fait.
ci dessous un exemple de SP que je genere
SET ANSI_NULLS ONGO
SET QUOTED_IDENTIFIER ONGO
DROP PROCEDURE [dbo].[IMPORT_ma_table_destination]
GO
CREATE PROCEDURE [dbo].[IMPORT_ma_table_destination]
AS
BEGIN
SET NOCOUNT ON
--Delete de la table
DELETE FROM ma_table_destination;
DECLARE @mes_variables_TMP
varchar(50), .........;
DECLARE @mes_variables_destination
uniqueidentifier, ....
DECLARE Cur_
CURSOR FOR SELECT *
FROM TMP_ma_table_temp;
Open Cur_
-- Boucle sur le curseur et exécution des requetes FETCH NEXT FROM Cur_
INTO @mes_variables_TMP, .....;
WHILE@@Fetch_Status = 0
BEGIN -- traitement pour remplir les variables à insérer ! SET @var_dest1 =
newid();
SET @var_dest2 = NULL;
SELECT @var_dest2 = FK
FROM T_ma_table_foreignkey
WHERE Moncode = @une_de_mes_variable_tmp;
-- ......... INSERT INTO ma_table_destination
(
mes_champs,.......
)
VALUES (
@mes_variables_destination .....
);
IF @Une_des_valeurs = 'TOTO'
BEGIN
INSERT INTO une_autre_table
values (.........................);
END FETCH NEXT FROM Cur_
INTO @mes_variables_TMP, .....;
END -- Fermeture du curseur et libération des ressources Close Cur_
Deallocate Cur_
END
C'est long

sur des fichiers de plusieurs millions de ligne c'est tres long....(environ 20h...), alors que je tape a chaque fois sur des zones indexe...
je me suis dis si j'essayais SSIS, seulement voila j'ai reussi a bidouiller quelques trucs, mais je ne suis pas arriver au même resultat que ce que j'etais capable de faire avec ma SP...genre mettre a jour une table etrangere apres l'insert dans ma table finale etc... => je ne maitrise pas l'outil

bref existe-t-il un moyen d'augmenter les perfs de ce genre d'import en gardant mon principe de procedure stockee, la possibilite de faire des insert a droite a gauche, de declencher ou non certain trigger......


Arthenius
http://blogs.developpeur.org/Arthenius/
"Ce qui ne me tue pas, me rend plus fort..."