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 :

un trigger bloque ma table


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut un trigger bloque ma table
    (sql server 2005)

    Bonjour a tous,

    j'ai creer un trigger qui doit ecrir dans un fichier txt lorsque un INSERT est realisé sur une table specifique.

    J'ai une question et un probleme a vous soumettre.
    La question est:
    Le trigger porte sur la table_A qui se trouve sur la base B (par exemple)
    Dois je creer le trigger en me connectant d'abord a la base de données oB u se trouve ma table_A?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use [base B]
     
    CREATE TRIGGER OVO_notification
    ON Table_A
    AFTER INSERT 
    AS
    Ou puis je creer le trigger connecté a Master et en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER OVO_notification
    ON Base_B.Table_A
    AFTER INSERT 
    AS
    Et le probleme est que lorsque je creer le trigger, la table_A n'est plus mis a jour par l'application...Plus d'insert. Essayant de comprendre, j'ai droper le trigger et la, toutes les transactions se sont insertées d'un coup.
    Ensuite j'ai re creer le trigger et voila que ça recommence, plus d'insert.
    Est il possible que le trigger bloque les inserts sur la table?

    Je donne le code du trigger:

    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
    CREATE TRIGGER OVO_notification
    ON VE_event
    AFTER INSERT 
    AS
      DECLARE @cmd nvarchar(1024)
      DECLARE @OpC_MsgText nvarchar(1024)
      DECLARE @OpC_Severity nvarchar(20)
      DECLARE @View_EventID int
      DECLARE @View_EventType nvarchar(512)
      DECLARE @View_Module nvarchar(512)
      DECLARE @View_Severity nvarchar(512)
      DECLARE @View_EventMsg nvarchar(512)
      DECLARE @View_Time datetime
     
      SELECT @View_EventID = (SELECT EventID FROM INSERTED)
      SELECT @View_EventType = (SELECT EventType FROM INSERTED)
      SELECT @View_Module = (SELECT Module FROM INSERTED)
      SELECT @View_Severity = (SELECT Severity FROM INSERTED)
      SELECT @View_EventMsg = (SELECT ModuleAndEventText FROM INSERTED)
      SELECT @View_Time = (SELECT Time FROM INSERTED)
     
      SELECT @OpC_Severity =
        CASE
          WHEN @View_Severity ='INFO' THEN 'normal'
          WHEN @View_Severity ='WARNING' THEN 'warning'
          WHEN @View_Severity ='ERROR' THEN 'critical'
          WHEN @View_Severity ='AUDIT_SUCCESS' THEN 'normal'
          WHEN @View_Severity ='AUDIT_FAIL' THEN 'normal'
          ELSE 'critical'
        END;
     
      BEGIN TRY
        SET @OpC_MsgText = 'MSG: "' + @View_EventID + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + @View_Time + '"'
        SET @cmd = 'echo ' + @OpC_MsgText + ' > E:\temp\VMwareView-events.txt'
        EXEC master..xp_cmdshell @cmd, no_output
      END TRY
      BEGIN CATCH
    	IF (XACT_STATE()) = -1  
    	BEGIN
    		ROLLBACK TRANSACTION;
    	END; 
      END CATCH;
    GO
    D'avance merci si vous avez des pistes.

  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    il faut créer le trigger dans la base B.

    Rapidement, j'ai constaté une petite coquille dans ton code :

    Tu as déclaré la variable @View_EventID comme étant un entier, mais tu as oublié de la caster lors de la concaténation dans la chaine @OpC_MsgText. Il en est de même pour les autres variables non littérales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @View_EventID int
    SET @OpC_MsgText = 'MSG: "' + @View_EventID + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + @View_Time + '"'

    Exemple renvoyant un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @View_EventID int
    DECLARE @OpC_MsgText nvarchar(1024)
    SET @View_EventID = 1
    SELECT @OpC_MsgText = 'MSG: "' + @View_EventID + '"'
    Message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*245, Niveau*16, État*1, Ligne*4
    Échec de la conversion de la valeur varchar 'MSG: "' en type de données int.
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Salut Étienne

    Ça donnerait ceci alors? La syntaxe est OK ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @OpC_MsgText = 'MSG: "' + CAST(@View_EventID AS nvarchar) + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + CAST(@View_Time as nvarchar)+ '"'
    Tu crois que c'est cette erreur qui bloque l'insertion de nouvelles lignes dans ma table_A?
    C'est incroyable non?

    Merci pour tes conseils.

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Salut Etienne

    Ça donnerait ceci alors? La sintaxe ext ok?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @OpC_MsgText = 'MSG: "' + CAST(@View_EventID AS nvarchar) + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + CAST(@View_Time as nvarchar)+ '"'
    Tu crois que c'est cette erreur qui bloque l'insertion de nouvelles lignes dans ma table_A?
    C'est incroyable non?

    Merci pour tes conseils.
    Attention si tu utilises la fonction CAST (ou CONVERT) et que tu ne précises pas la longueur du type de données, alors il peut y avoir un problème si la longueur de la chaîne dépasse 30

    Après correction de la procédure, supprime et recrée le trigger sur la base B puis fait le test
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Ok
    c'est ça l'erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Ok
    c'est ça l'erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.
    Il faut donc activer xp_cmdshell. Il faut exécuter ce lot de commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --Activer les options avancées
    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    -- Activer xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    -- Prise en compte de la configuration
    RECONFIGURE
    GO
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour

    alors voici les dernieres nouvelles,
    si je fais un INSERT a la manuel le trigger se declenche et creer le fichier txt..ok
    Mais normalement c'est mon application qui doit creer les inserts et la ça bloque.
    J'ai enlevé le rollback que j'avais placer dans la section de capture d'erreur.

    C'est etrange, si je drop le trigger, toutes les transactions en attente s'inserent, et si je creer de nouveau le trigger, les transaction se rebloques.
    Quelqu'un a deja vu ça? Comment puis-je debeuger un tel comportement?

    D'avance merci

  8. #8
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Peux-tu montrer le bout de code de ton appli qui effectue l'INSERT ?

    une remarque à propos de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @cmd = 'echo ' + @OpC_MsgText + ' > E:\temp\VMwareView-events.txt'
    Avec ça tu auras toujours une ligne dans le fichier E:\temp\VMwareView-events.txt

    par contre en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @cmd = 'echo ' + @OpC_MsgText + ' >> E:\temp\VMwareView-events.txt'
    tu peux avoir toute l'historique dans le fichier.
    Etienne ZINZINDOHOUE
    Billets-Articles

  9. #9
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Salut

    je oeux pas te montrer le code qui fait l'insert car il s'agit de de WMWARE, lorsque tu entre dans l'admin web ça laisse un EVENT dans la base SQL server, et ce que l'on cherche c'est detecter les EVENT et les relier avec le system d'alert OVO de HP.
    Ce qui explique le fichier txt avec une seule ligne, c'est exactement ce que l'on recherche car OVO peu lire une ligne de txt et recuperer le contenu pour gerer les alertes.

    Je vais essayer avec un trigger plus simple d'une seule variable, et qui ecrit dans le txt.

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Admettons maintenant que votre table subisse un grand nombre d'INSERT ...
    Cela m'étonnerait beaucoup que votre base de données tienne le coup en terme de vitesse de traitement ...

    J'aurai plutôt vu un travail de l'Agent SQL Server, planifié pour s'exécuter toutes les minutes, qui viendrait lire cette table pour en extraire les données dans un fichier.

    On peut faire cela avec BCP, qui exécute ce style de tâche à une vitesse vertigineuse, ou avec un package SSIS.
    Cela évite par ailleurs d'ouvrir la brèche de xp_cmdshell ...

    @++

  11. #11
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour

    ha ok une nouvelle voie.
    J'ai 2 questions par rapport a ce que tu dit.

    Existe t-il des documents qui parlent de cette breche de securité de xp_cmdshell?
    Et d'autre part pourrais tu pointer vers la doc des 2 outils que tu preconise?
    BCP et SSIS, ça m'aiderais bien pour continuer.

    D'avance merci

  12. #12
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Existe t-il des documents qui parlent de cette breche de securité de xp_cmdshell?
    Je ne crois pas; on trouvera probablement des blogs qui en parlent
    En tout cas, on peut toujours faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC xp_cmdshell 'FORMAT S:'
    Et le résultat peut ne pas faire rire du tout ...
    De la même façon je suppose qu'on peut faire des attaques par injection en tentant d'exécuter une telle commande ... ou d'autres

    Et d'autre part pourrais tu pointer vers la doc des 2 outils que tu preconise?
    Voici la documentation de l'utilitaire BCP

    Pour SSIS, Fleur-Anne Blain en a fait une très bonne introduction ici.
    Je pense que cela devrait suffire pour réaliser l'export

    @++

  13. #13
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Pour ajouter une autre possibilite:

    - Lancer une fenetre sqlps.exe (ou executer l'executable - Commande dos et ecrire: sqlps)
    - Utiliser la commande suivante:
    invoke-sqlcmd -ServerInstance <instanceName> -Query <la Query> | export-csv <fichier de destination>

    Ca realise un export en csv de la query passee.

    Il est aussi possible de passer un script directement a sqlps.exe...

  14. #14
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Ha classe !

    Un petit billet ?

    @++

  15. #15
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Salut a tous,
    alors j'ai essayé cette sintaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PS SQLSERVER:\> invoke-sqlcmd -ServerInstance "MSSQLSERVER1" -Query "use [VMware
     View Events];select * from VE_event where EventID=(select MAX(EventID)from VE_e
    vent)" | export-csv "E:\temp\prueba.csv"

    Et j'ai cette erreur, j'ai verifier le nom de l'instance avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SERVERPROPERTY ('InstanceName')
    Je suppose que c'est correct.


    Et l'erreur:

    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
    Invoke-Sqlcmd : A network-related or instance-specific error occurred while est
    ablishing a connection to SQL Server. The server was not found or was not acces
    sible. Verify that the instance name is correct and that SQL Server is configur
    ed to allow remote connections. (provider: Named Pipes Provider, error: 40 - Co
    uld not open a connection to SQL Server)
    At line:1 char:14
    + invoke-sqlcmd <<<<  -ServerInstance "MSSQLSERVER1" -Query "use [VMware View E
    vents];select * from VE_event where EventID=(select MAX(EventID)from VE_event)"
     | export-csv "E:\temp\prueba.csv"
        + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlExcept
       ion
        + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.
       PowerShell.GetScriptCommand
     
    Invoke-Sqlcmd :
    At line:1 char:14
    + invoke-sqlcmd <<<<  -ServerInstance "MSSQLSERVER1" -Query "use [VMware View E
    vents];select * from VE_event where EventID=(select MAX(EventID)from VE_event)"
     | export-csv "E:\temp\prueba.csv"
        + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserExceptio
    Vue que l'instance name est correcte, je suppose que le probleme se situe avec l'autorisation de conection REMOTE, non?
    Comment puis je etre sur?

    A et dans ma Query remarquez que je place le use [base name] avant le select...Je sais pas trop si je peux faire comme ça.

    D'avance merci

  16. #16
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    J'ai aussi essayé avec BCP et je n'arrive pas a pointer sur ma base, c'est un nom de base avec des espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Users\Administrator.ATCLAB>bcp "select * from [VMware View Events].VE_event w
    here EventID=(select MAX(EventID)from VE_event)"  queryout "Jarrod Rana.dat" -T
    -c
    SQLState = S0002, NativeError = 208
    Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object nam
    e 'VMware View Events.VE_event'.
    SQLState = 37000, NativeError = 8180
    Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could
     not be prepared.
    Les crochets ça n'a pas l'air de plaire ici...

  17. #17
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    J'ai aussi essayé avec BCP et je n'arrive pas a pointer sur ma base, c'est un nom de base avec des espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Users\Administrator.ATCLAB>bcp "select * from [VMware View Events].VE_event w
    here EventID=(select MAX(EventID)from VE_event)"  queryout "Jarrod Rana.dat" -T
    -c
    SQLState = S0002, NativeError = 208
    Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object nam
    e 'VMware View Events.VE_event'.
    SQLState = 37000, NativeError = 8180
    Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement(s) could
     not be prepared.
    Les crochets ça n'a pas l'air de plaire ici...

    pour contourner les problèmes de crochets et de parenthèses, tu peux créer une vue SQL et l'utiliser dans le select du BCP.
    autre chose, il faut indiquer le chemin absolu du fichier de sortie.
    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  18. #18
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Salut etienne
    je comprends pas trop, une vue SQL tu dis?
    Une vue dans mon jargon c'est une representation en memoire, de données extraites par une query, donc la vue appartient a une base.schema.
    Dans ce cas, je dois quand meme preciser dans quelle base se trouve cette vue n'est ce pas?

    Pourrais tu me donner un exemple?
    D'avance merci

  19. #19
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    ok j'ai trouvé la forme de le faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bcp "select * from [VMware View Events].dbo.VE_event where EventID=(select MAX(EventID)from [VMware View Events].dbo.VE_event)"  queryout "E:\temp\ovoman.dat" -T -c
    Excellent, je vous remercie a tous !!

  20. #20
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Salut a tous,
    alors j'ai essayé cette sintaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PS SQLSERVER:\> invoke-sqlcmd -ServerInstance "MSSQLSERVER1" -Query "use [VMware
     View Events];select * from VE_event where EventID=(select MAX(EventID)from VE_e
    vent)" | export-csv "E:\temp\prueba.csv"

    Et j'ai cette erreur, j'ai verifier le nom de l'instance avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SERVERPROPERTY ('InstanceName')
    Je suppose que c'est correct.


    Et l'erreur:

    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
    Invoke-Sqlcmd : A network-related or instance-specific error occurred while est
    ablishing a connection to SQL Server. The server was not found or was not acces
    sible. Verify that the instance name is correct and that SQL Server is configur
    ed to allow remote connections. (provider: Named Pipes Provider, error: 40 - Co
    uld not open a connection to SQL Server)
    At line:1 char:14
    + invoke-sqlcmd <<<<  -ServerInstance "MSSQLSERVER1" -Query "use [VMware View E
    vents];select * from VE_event where EventID=(select MAX(EventID)from VE_event)"
     | export-csv "E:\temp\prueba.csv"
        + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlExcept
       ion
        + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.
       PowerShell.GetScriptCommand
     
    Invoke-Sqlcmd :
    At line:1 char:14
    + invoke-sqlcmd <<<<  -ServerInstance "MSSQLSERVER1" -Query "use [VMware View E
    vents];select * from VE_event where EventID=(select MAX(EventID)from VE_event)"
     | export-csv "E:\temp\prueba.csv"
        + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserExceptio
    Vue que l'instance name est correcte, je suppose que le probleme se situe avec l'autorisation de conection REMOTE, non?
    Comment puis je etre sur?

    A et dans ma Query remarquez que je place le use [base name] avant le select...Je sais pas trop si je peux faire comme ça.

    D'avance merci
    Quel est le nom de votre serveur ?
    J'ai ete legerement incomplet dans la commande:
    invoke-sqlcmd -ServerInstance <instanceName> -Query <la Query> | export-csv <fichier de destination>

    Une commande efficace en powershell et disponible avec sqlps donc est la commande get-help qui s'utilise comme ceci par exemple pour vous retourner l'aide sur la commande Invoke-Sqlcmd:
    Et pour en avoir des exemples d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get-help Invoke-Sqlcmd -examples
    -------------------------- EXAMPLE 1 --------------------------
    C:\PS>Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"


    NB: Elsuket, je ferai un petit billet la dessus apres les fetes

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2007, 11h11
  2. créer TRIGGER sur 1 table avec liaison sur 2 autre table
    Par shaka84 dans le forum Développement
    Réponses: 2
    Dernier message: 11/04/2006, 11h10
  3. trigger createur de table sous mysql
    Par lours85 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 20/02/2006, 11h53
  4. pb trigger avec nested table
    Par evlad dans le forum Oracle
    Réponses: 1
    Dernier message: 29/12/2005, 12h04
  5. trigger sur deux tables
    Par Shabata dans le forum Développement
    Réponses: 4
    Dernier message: 04/05/2004, 16h55

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