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 :

procedure update insert


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
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut procedure update insert
    bonjour à tous, j'aurais voulu savoir si dans une procédure stockée avec curseur il existait un moyen quelconque de savoir si un champ à été inséré ou modifier dans la table référencé par le curseur!
    Je sais que c'est possible avec les triggers mais qu'en est il pour les procédures stockées?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    Personne n'a une idée???

    Je cherche toujours mais pour le moment sans résultat...

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    réponse non.

    si c'est toujours ton pb avec client avec adresse...

    pour ma part (c'est peut être pas le mieux ) je créerai une table du type

    create table log_upd
    (pk_id int int identity(1,1),
    nom_table varchar(50),
    id_table int, -- correspond a la valeur de la pk de la table nom_table
    date_ins datetime,
    date_upd datetime,
    flag_maj smallint not null default 0
    )
    puis un trigger sur les tables que tu veux surveiller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    create trigger ... on ..
    for insert
    begin
    insert into log_upd (nom_table,id_table,date_ins) ('nom_table',valeur_index,getdate())
    end
     
    create trigger ... on ..
    for update
    begin
    insert into log_upd (nom_table,id_table,date_upd) ('nom_table',valeur_index,getdate())
    end
    ou valeur index est le select de ta pk from inserted

    et ensuite je ferai une jointure avec log_upd where nom_table=.. and flag_maj =0

    la maj faite, je passe le flag a 1

    j'ai utilisé ce système pour valider les annonces d'un site

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    non ce n'est plus le meme probleme!
    Pour la table adresse j'ai résolu le pb plus simplement en choisissant comme pivot de jointure un champs qui doit obligatoirment etre renseigné mais qui ne peut pas etre modifié...

    Mais le truc auquel je n'avais pas penser c'était de différencier update et insert.
    Pour savoir si un update est nécessaire jutilise en effet un champs CBModification créér dans ma table F_comptet(dans laquele les nouveaus champs sont créés). Si ce champs a pour valeur la date du jour c'est qu'il à été modifier donc à ce moment la j'update dans mon autre table AccountBase.
    Jusque la tous marche bien.

    Par contre je viens de me rendre compte que le champs CBmodification est aussi mise à jour lors de l'insertion d'un nouveau client dans F_cOMPTET. du coup si je me base sur ce champs seulement je ne sais pas si il faut mettre a jour ou bien inserer???

    Il me faut donc trouver un moyen...

    Le probleme c'est qu'il ne me reste plus que jusqu'a la fin de la semaine pour terminer mon application...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    La je cherche du coté des variable systeme du genre @@rowcount et @@identity...

    J'ai peut etre trouvé mon bohneur


    J'ai fait ca:

    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
     
     
    Update AMIELEC_MSCRM.dbo.AccountBase
    SET AccountCategoryCode=@catcomptaInt,TerritoryId=@conv_pays,DefaultPriceLevelId=@id_tarif,
    OwningUser=@id_utilisateur,AccountNumber=@numpayeur,Description=@intitule,WebSiteURL=@site,EMailAddress1=@mail,
    Telephone1=@telephone,Fax=@fax,ParentAccountId=@idnom_parent,StatusCode=1,StateCode=0,DeletionStateCode=0
    where Name=@Num 
    Print('maj du client'+@num)
     
    if @@rowcount=0
    BEGIN
    --INSERTION DANS LES TABLES DE LA CRM
    insert into AMIELEC_MSCRM.dbo.AccountBase(AccountId,OwningBusinessUnit,AccountCategoryCode,TerritoryId,DefaultPriceLevelId,
    CustomerSizeCode,PreferredContactMethodCode,PreferredAppointmentDayCode,PreferredAppointmentTimeCode,CustomerTypeCode,AccountRatingCode,IndustryCode,TerritoryCode,
    AccountClassificationCode,BusinessTypeCode,OwningUser,OriginatingLeadId,PrimaryContactId,Name,AccountNumber,Revenue,NumberOfEmployees,Description,SIC,OwnershipCode,MarketCap,
    SharesOutstanding,TickerSymbol,StockExchange,WebSiteURL,FtpSiteURL,EMailAddress1,EMailAddress2,EMailAddress3,Telephone1,DoNotPhone,DoNotFax,DoNotEMail,DoNotSendMM,DoNotPostalMail,DoNotBulkEMail,DoNotBulkPostalMail,
    Telephone2,Fax,Telephone3,CreditLimit,CreditOnHold,ParentAccountId,StatusCode,StateCode,DeletionStateCode)
    values(NEWID(),@businness_unit,@catcomptaInt,@conv_pays,@id_tarif,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,@id_utilisateur,
    Null,Null,@num,@numpayeur,Null,Null,@intitule,Null,Null,Null,Null,Null,Null,@site,Null,@mail,Null,Null,@telephone,0,0,0,0,0,0,Null,Null,@fax,Null,Null,Null,@idnom_parent,1,0,0)
    Print('insert du client'+@num)
    print(@@IDENTITY)
    END
     
    Update AMIELEC_MSCRM.dbo.AccountExtensionBase
    SET New_Identifiant=@identifiant_client,New_TypePersonne=@type_pers_char,New_categorie_comptable=@catcomptaChar,
    New_representant=@un_representant,New_contacts=@contact,New_descriptif=@intitule
    where New_societe=@Num
    Print('maj du client'+@num)
     
    if @@rowcount=0
    BEGIN
    insert into AMIELEC_MSCRM.dbo.AccountExtensionBase(AccountId,New_Identifiant,New_TypePersonne,New_categorie_comptable,New_representant,New_prenom_representant,New_nom_representant,New_contacts,New_societe,New_descriptif)
    values(NEWID(),@identifiant_client,@type_pers_char,@catcomptaChar,@un_representant,null,null,@contact,@num,@intitule)
    Print('insert du client'+@num)
    END
    Normalement si le nom du client n'existe pas dans AccountBAse le update ne se fera pas et 0ligne seront affectées.
    @@rowconut devrait alors prendre la valeur 0.
    Et l'insertion devrai se faire.

    ca me parait cohérent? pourtant quand je test quand un client existe dans AccountBAse il est mise à jour et inséré donc --> probleme... si il n'existe pas il est bien inserer seulement donc la tout va bien.

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    tu peux utiliser le @@rowcount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    update ma_table set ...
    if @@rowcount=0 -- l'enregistrement n'existe pas, l'update n'a rien fait
      insert ...

Discussions similaires

  1. Procedure stockée + insert update
    Par chouchou83 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/06/2008, 13h51
  2. UPDATE/INSERT sur des colonnes
    Par baltagi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2007, 17h54
  3. Procedure avec INSERT et champ variable
    Par bbshadoks dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/12/2006, 10h14
  4. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  5. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58

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