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 :

probleme update sur une vue [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut probleme update sur une vue
    Bonjour,
    voila une image qui expliquera la situation
    Nom : fgfg.PNG
Affichages : 236
Taille : 87,9 Ko

    j'ai créé une vue qui regroupe les 2 tables AGENT et PERSONNE avec des déclencheurs pour pouvoir la manipuler comme une table normale.

    pour les requetes comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE situation_personnelle 
    SET NOM = 'KARIM'
    WHERE  CIN='123456'
     
    DELETE FROM situation_personnelle
    where CIN='123456'
    ça marche bien . mais quand je veux la modifier directement sur le 'data grid' je ne peux pas, comme indiqué dans la photo .

    voila le déclencheur instead of update
    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
    CREATE TRIGGER [dbo].[situation_personnelle_update_TR] ON [dbo].[situation_personnelle] INSTEAD OF UPDATE
    AS
    BEGIN
     
    	UPDATE AGENT
    	SET CIN = I.CIN, 
    		MATRICULE = I.MATRICULE,
    		DATERECRUTEMENT = I.DATERECRUTEMENT
     
    	FROM inserted I 
    			JOIN 
    		 AGENT A ON I.PERSONNEID = A.PERSONNEID;
     
     
        UPDATE PERSONNE
    	SET NOM = I.NOM,
    		PRENOM = I.PRENOM,
    		SEXE = I.SEXE,
    		DATENAISSANCE = I.DATENAISSANCE,
    		LIEUNAISSANCE = I.LIEUNAISSANCE,
    		ADRESSE = I.ADRESSE,
    		TELEPHONE = I.TELEPHONE,
    		EMAIL = I.EMAIL,
    		SITUATIONFAMILIALE = I.SITUATIONFAMILIALE
     
    	FROM inserted I JOIN PERSONNE A ON I.PERSONNEID = A.PERSONNEID;
     
    END

  2. #2
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Bonjour ,

    Peux tu nous donner le code DDL de tes tables et de tes Vues ? avec les index ....

    As tu regarder via SQL Server Profiler la requette qui été envoyé dans ce cas là ?

    Peux-tu nous la transmettre ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    L'interface permet en effet de procéder à des mises à jour. Elle génère une requete qui va répercuter les modifications que vous avez apportées manuellement.
    En l’occurrence, le message d'erreur est clair. Rien ne permet d'identifier la ligne que vous avez modifiée, en conséquence il n'est pas possible de générer une requête de modification.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    table agent :
    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
    CREATE TABLE [dbo].[AGENT](
        [PERSONNEID] [int] NOT NULL,
        [MATRICULE] [varchar](50) NOT NULL,
        [CIN] [varchar](50) NOT NULL,
        [DATERECRUTEMENT] [date] NULL,
     CONSTRAINT [PK_AGENT] PRIMARY KEY CLUSTERED 
    (
        [PERSONNEID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
     CONSTRAINT [AK_CIN_AGENT] UNIQUE NONCLUSTERED 
    (
        [CIN] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    table personne :
    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
    CREATE TABLE [dbo].[PERSONNE](
        [PERSONNEID] [int] IDENTITY(1,1) NOT NULL,
        [NOM] [varchar](50) NOT NULL,
        [PRENOM] [varchar](50) NOT NULL,
        [SEXE] [char](1) NOT NULL,
        [DATENAISSANCE] [date] NOT NULL,
        [LIEUNAISSANCE] [varchar](50) NULL,
        [ADRESSE] [varchar](50) NULL,
        [TELEPHONE] [varchar](50) NULL,
        [EMAIL] [varchar](50) NULL,
        [SITUATIONFAMILIALE] [char](3) NOT NULL,
     CONSTRAINT [PK_PERSONNE] PRIMARY KEY NONCLUSTERED 
    (
        [PERSONNEID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
     
    ALTER TABLE [dbo].[PERSONNE]  WITH CHECK ADD  CONSTRAINT [CK_SEXE_PERSONNE] CHECK  (([SEXE]='F' OR [SEXE]='M'))
    GO
     
    ALTER TABLE [dbo].[PERSONNE] CHECK CONSTRAINT [CK_SEXE_PERSONNE]
    GO
     
    ALTER TABLE [dbo].[PERSONNE]  WITH CHECK ADD  CONSTRAINT [CKC_SITUATIONFAMILIAL_PERSONNE] CHECK  (([SITUATIONFAMILIALE]='VEU' OR [SITUATIONFAMILIALE]='DIV' OR [SITUATIONFAMILIALE]='MAR' OR [SITUATIONFAMILIALE]='CLB'))
    GO
     
    ALTER TABLE [dbo].[PERSONNE] CHECK CONSTRAINT [CKC_SITUATIONFAMILIAL_PERSONNE]
    GO
    la vue situation_personnelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE VIEW [dbo].[situation_personnelle]
    AS
    SELECT     y.MATRICULE, y.CIN, x.NOM, x.PRENOM, x.DATENAISSANCE, x.LIEUNAISSANCE, x.SEXE, x.SITUATIONFAMILIALE, y.DATERECRUTEMENT, x.ADRESSE, x.TELEPHONE, x.EMAIL, 
                          x.PERSONNEID
    FROM         dbo.PERSONNE AS x INNER JOIN
                          dbo.AGENT AS y ON x.PERSONNEID = y.PERSONNEID
     
    GO
    et pour le profiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    exec sp_executesql N'UPDATE TOP (200) situation_personnelle SET NOM = @NOM WHERE (MATRICULE = @Param1) AND (CIN = @Param2) AND (NOM = @Param3) 
    AND (PRENOM = @Param4) AND (DATENAISSANCE = @Param5) AND (LIEUNAISSANCE = @Param6) AND (SEXE = @Param7) AND (SITUATIONFAMILIALE = @Param8)
     AND (DATERECRUTEMENT = @Param9) AND (ADRESSE = @Param10) AND (TELEPHONE IS NULL) AND (EMAIL IS NULL) AND (PERSONNEID = @Param11)',N'@NOM nvarchar(5),@Param1 nvarchar(4),
    @Param2 nvarchar(6),@Param3 nvarchar(6),@Param4 nvarchar(5),@Param5 date,@Param6 nvarchar(5),@Param7 nvarchar(1),@Param8 nvarchar(3),@Param9 date,@Param10 nvarchar(9),@Param11 int',@NOM=N'Salim',@Param1=N'5454',@Param2=N'123456',@Param3=N'Salima',@Param4=N'amine',@Param5='1955-05-05',@Param6=N'oujda',@Param7=N'M',@Param8=N'MAR',@Param9='1988-05-05',
    @Param10=N'qv nakhil',@Param11=19

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Rien ne permet d'identifier la ligne que vous avez modifiée, en conséquence il n'est pas possible de générer une requête de modification.
    je fais quoi pour corriger l'erreur ^^' ?

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    je pense que c'est votre trigger qui provoque cela, en indiquant plusieurs mise à jour.
    Essayez en ajoutant SET NOCOUNT ON au début de votre trigger.

    Par ailleurs, pourquoi n'y a-t-il pas de contrainte référentielle déclarée sur personneid entre les deux tables ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    merciiiiiiiii enormement, ca marche maintenant avec . je marquerai ce sujet comme resolu.
    en fait, j'ai encore un petit problème de requête mais c'est sur visual studio si vous pouvez m'aider :
    http://www.developpez.net/forums/d14...r/#post7955949

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

Discussions similaires

  1. [AC-2007] Probleme update sur une base SQLSERV a partir de formulaires Access
    Par Peper89 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2010, 14h36
  2. [trigger]Probleme d'update sur une table
    Par AlternantOracle dans le forum PL/SQL
    Réponses: 5
    Dernier message: 25/02/2010, 15h11
  3. update sur une vue
    Par lastrecrue dans le forum Débuter
    Réponses: 1
    Dernier message: 24/04/2009, 21h54
  4. Probleme de performance sur une vue
    Par nomissamoht dans le forum Oracle
    Réponses: 1
    Dernier message: 06/03/2009, 14h51
  5. Probleme de requete sur une vue
    Par MaInR0 dans le forum JDBC
    Réponses: 10
    Dernier message: 10/11/2008, 20h26

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