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 :

procédure stocké et BCP Bulk Copy Program


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut procédure stocké et BCP Bulk Copy Program
    Bonjour à tout les gens qui vont lire mon message OU non

    J’ai deux questions qui semblent assez simples, mais moi je bloque dessus:

    A/ je veux savoir d’une manière simple comment créer une procédure stocké (avec un exemple que je peux tester (manager studio) je suis sous SQL server 2005)

    B/ Je dois faire des développements sur un outil qui utilise BCP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TRUNCATE TABLE Int_Contacts
     BCP BD_dev..Int_Contacts
     IN "E:\BD\DEV\Stage\Int_Contacts_($BATCH_ID).DAT"
     -f"E:\BD\DEV\Source\Format\Int_Contacts.FMT"
     -e"E:\BD\DEV\Archive\($BATCH_ID)\Log_HHmmss\\Int_Contacts.err"
     -UBD_dev
     -P*********** 
     -m100
     -hTABLOCK
    Je dois faire quelques modifications donc :

    1/comment tester ce script sans passer par l’inviter commande (dans manager studio par exemple) ? je peux le mettre dans une procédure stocké ? (si oui comment merci ?)

    2/ je n’ai pas compris le rôle du $ dans le script …

    Merci d’avance... ce truc est assez urgent merci.

  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 : 47
    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
    Bonjour,

    A/ je veux savoir d’une manière simple comment créer une procédure stocké (avec un exemple que je peux tester (manager studio) je suis sous SQL server 2005)
    Depuis SSMS sous le noeud Programmability > clic droit sur le noeud Stored procedures > New stored procedure

    Vous disposrez alors d'un template pour pouvoir créer votre procédure


    B/ Je dois faire des développements sur un outil qui utilise BCP

    1/comment tester ce script sans passer par l’inviter commande (dans manager studio par exemple) ? je peux le mettre dans une procédure stocké ? (si oui comment merci ?)

    2/ je n’ai pas compris le rôle du $ dans le script …
    1/Vous pouvez utiliser la procédure stockée xp_cmdshell pour cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TRUNCATE TABLE ...
     
    EXEC master..xp_cmdshell 'bcp .....'
    2/Très probablement une variable ... Regardez comment est utilisé le script

    ++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    merci mikedavem pour votre réponse,

    un template pour pouvoir créer votre procédure
    je veux plusss d'explication, avec un exemple je peux facilement me débloquer... merci

    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
    	-- Add the parameters for the stored procedure here
    	<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
    	<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    	SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
    END
    GO
    et pour
    xp_cmdshell
    j'exécute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    EXEC master..xp_cmdshell 
    'BCP BD_dev..Int_Prospect_Updates
     IN "E:\BD\DEV\Stage\Int_Contacts_($BATCH_ID).DAT"
     -f"E:\BD\DEV\Source\Format\Int_Prospect_Updates.FMT"
     -e"E:\BD\DEV\Archive\($BATCH_ID)\Log_HHmmss\\Int_Contacts.err"
     -UBD
     -P*********** 
     -m0
     -hTABLOCK'
    y a pas d'erreurs mais rien d'autre ni sur la table ni ailleurs!!!

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    Bonjour,
    je suis désolé de mon niveau de SQL server, mais je veux juste créer une procédure stocké, en entrée elle aura le fichier csv a mettre dans la table (BCP).
    heeeeeelp me pliiiiz....

  5. #5
    Invité de passage
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Par défaut
    Bonjour

    Voici un exemple concret de la création d'une PS , cette procédure calcule le temps entre 2 dates différentes .

    Si j'ai bien compris votre problématique , il s'agit d'intégré un fichier CSV dans une table , c'est bien ça? si c'est ça votre problème alors il faut passer par un SSIS non pas une PS .

    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
    USE [Dev]
    GO
     
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
     
     
    CREATE PROCEDURE [dbo].[GetTimeLoginTC] (@DateBegin nvarchar(8),@DateEnd nvarchar(8) )
    AS
    BEGIN
     
     
    		declare @Time int
     
    		set  @Time =0
     
    		set @Time=@Time+DATEDIFF(S,@DateBegin,@DateEnd)	
     
     
    RETURN @Time
     
    END
     
    GO

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    Merci nasirus pour votre réponse rapide,

    oui mon problème est d'intégrer un fichier csv dans un table...
    j'ai pas compris pourquoi cela n'est pas possible? y a toujours la fonction BCP?
    donc ce que je veux moi (j'ai jamais écrit une PS!!!) c'est appeler une PS en fournissant le nom du fichier + chemin et quelle fasse le nécessaire (c'est toujours la même table, et c'est un fichier csv séparateur " ; ")

    merci d'avance pour vos explication.

  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 : 47
    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
    Une procédure stockée peut suffire dans ce cas là. Dommage d'utiliser SSIS pour une intégration aussi simple.

    Utilisez BULK INSERT dans votre cas.

    Petit exemple (en reprenant à peu près votre modèle :

    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
    CREATE PROCEDURE bcp_insert
    (
     @bcp_file VARCHAR(50),
     @bcp_fmt VARCHAR(50)
    )
    AS
     
    DECLARE @sql VARCHAR(500);
     
    SET @sql = 'BULK INSERT TEST.dbo.T_BCP 
               FROM ''' + @bcp_file + '''
    			WITH 
    			(
    			  FORMATFILE = ''' + @bcp_fmt + ''',
    			  MAXERRORS = 0,
    			  TABLOCK
    			)';
     
    EXEC (@sql);
    ++

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut
    merci mikedavem,
    Vu que j'ai pas le fameux fichier format FMT!!!
    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH
    (
    FIRSTROW=2,
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n'
    )
    Donc après j'aurai juste à écrire ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC bcp_insert(mon_fichier)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2008, 10h29
  2. Procédure stockée - bcp et fichier variable
    Par iza76 dans le forum Outils
    Réponses: 2
    Dernier message: 11/04/2008, 09h53
  3. Réponses: 3
    Dernier message: 09/09/2004, 12h31
  4. Procédure stockée : BCP pour sauvegarde d'une base...
    Par Webman dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2004, 12h31
  5. Réponses: 4
    Dernier message: 04/12/2003, 09h12

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