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
| CREATE PROCEDURE [DBO].[SP_IMPORTDATA]
@Table VARCHAR(128), -- nom de la table à mettre à jour
@Path VARCHAR(128), -- chemin du fichier d'input
@val INT OUTPUT
AS
DECLARE @Req VARCHAR(8000)
DECLARE @SQLString VARCHAR(800)
DECLARE @SQLCount VARCHAR(128)
BEGIN
-- Test lexistence des paramètres
IF @Table IS NULL or @Path IS NULL
BEGIN
RAISERROR ('SP_IMPORTDATA : Paramètres NULL impossible à traiter', 16, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR1
IF @@ERROR = 547 GOTO LBL_ERROR2
END
-- Test l'existence de la table
IF NOT EXISTS(SELECT *
FROM INFORMATION_SCHEMA.tables
WHERE TABLE_NAME = @Table)
BEGIN
RAISERROR ('SP_IMPORTDATA : Références de table inconnue %s', 16, 1, @Table)
IF @@ERROR <> 0 GOTO LBL_ERROR1
IF @@ERROR = 547 GOTO LBL_ERROR2
END
-- Construction de la requête
SET @Req = 'BULK INSERT ' + @Table + ' FROM ''' + @Path + '\' + @Table + ''' WITH (FIELDTERMINATOR='';'', ROWTERMINATOR=''\n'', TABLOCK)'
--On passe en mode bulk-logged recovery model pour optimiser les performances
ALTER DATABASE AFER SET RECOVERY BULK_LOGGED
-- exécution de la requête pour l'insertion des données dans la table
EXEC (@Req)
--On passe en mode Full recovery model une fois l'insertion en block effectué
ALTER DATABASE AFER SET RECOVERY FULL
--Recuperation du nombre de ligne insérées et renvoi du nombre de lignes
SET @SQLCount = 'SELECT @val=count(*) FROM ' + @Table
EXEC(@SQLCount)
SELECT @val AS result
END
LBL_ERROR1:
PRINT 'ERREUR LORS DE L''EXÉCUTION DE LA PROCÉDURE STOCKÉE SP_ IMPORTDATA'
-- EXEC sp_update_notification 'Une erreur est survenu lors de l''execution de la procédure stockée SP_ IMPORTDATA', 'agent', 1
-- ROLLBACK TRANSACTION
LBL_ERROR2:
PRINT 'A CHECK CONSTRAINT violation occurred'
-- EXEC sp_update_notification 'Une erreur est survenu lors de l''execution de la procédure stockée SP_ IMPORTDATA', 'agent', 1
-- ROLLBACK TRANSACTION
GO |
Partager