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 :

TSQL Trigger update [2008R2]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Par défaut TSQL Trigger update
    Bonjour,

    je suis assez newbie sur le t-sql et les triggers et j'aurais besoin d'un coup de pouce.
    voilà mon besoin :
    est enregistré dans une table, deux valeurs (Arret - Direction)
    je souhaite dès qu'un enregistrement est ajouté mettre à jour un 3ème champ (code) à partir d'une comparaison dans une autre table.

    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
    declare
    	@in_DirSaisie nvarchar(400)
    	
    
    BEGIN
    	-- Declare the return variable here <@ResultVar, sysname, @Result> <Function_Data_Type, ,int>
    	DECLARE @ResultVar nvarchar(50)
    	Declare @v_SensA nvarchar(225)
    	Declare @v_SensB nvarchar(225)
    	
    	
    	
    	-- Add the T-SQL statements to compute the return value here SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>
    Essai1	
    	set @ResultVar = ( select distinct CodeMRN from Topo t where @in_DirSaisie in (SELECT distinct rtrim(ltrim(t.lg_Arr))+rtrim(ltrim(t.SensB)) FROM Topo t))
    	
    	--select distinct CodeMRN from Topo t where '90-14-JuilletGeorges Braque / Technopôle' in (SELECT distinct rtrim(ltrim(t.lg_Arr))+rtrim(ltrim(t.SensB)) FROM Topo t)
    Essai2		
    		IF @in_DirSaisie = @v_SensA set @ResultVar = (select codeMRN from Topo where @v_SensA = @in_DirSaisie)
    		ELSE   
    		   BEGIN  
    			 IF @in_DirSaisie = @v_SensB set @ResultVar = (select codeMRN from Topo where @v_SensB = @in_DirSaisie);  
    		   ELSE  
    			  SET @in_DirSaisie = null;  
    		   END ;	
    	
    	
    	-- Return the result of the function <@ResultVar, sysname, @Result>
    	RETURN @ResultVar
    
    END
    le message de retour du débogueur est le suivant :

    Msg*512, Niveau*16, État*1, Ligne*22
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    Merci votre aide

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Dans SQL Server les déclencheurs sont ensemblistes. Cela signifie qu'ils ne sont activer qu'une seule fois, même s'il y a 2545325456 lignes impactées par la commande ....
    Donc, la présence de variables est la suspicion d'un code inadapté...

    Commencez par nous donner TOUT le code de votre trigger et non pas un petit bout à la con qui ne sert a rien ! On ne sait même pas si c'est un déclencheur AFTER ou INSTAED, si c'est sur une vue ou une table et si c'est sur INSERT, UPDATE ou DELETE !

    L’informatique c'est tout le contraire d'une boule de cristal

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Par défaut
    Bonjour @SQLPRO

    En fait je n'ai pas encore le code du trigger, il est en vrac.
    je décomposais mon code pour déjà avoir la valeur que je souhaitais avant l'update.

    mais pour essayer de répondre à ta question (si tu permets que je te tutoie ce serait un after insert update.

    j'espère que ce sera suffisamment clair

  4. #4
    Membre averti Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Par défaut
    je vais reposer ma question, il faut effectivement que je mette mes idées à plat.
    c'est pas clair mon truc

  5. #5
    Membre averti Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Par défaut
    Bon,

    j'ai finalement réussi à réaliser mon 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    USE [QSE]
    GO
    /****** Object:  Trigger [dbo].[QSE_CodeMRN]    Script Date: 11/04/2020 13:29:50 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- Batch submitted through debugger: Test Trigger QSE.sql|0|0|F:\Scripts\QSE Debug SQL\Test Trigger QSE.sql
    Create TRIGGER QSE_CodeMRN
    ON [dbo].[Constat]
    After insert
     
    AS
    begin
    --------------------------------------
    --definitions variables
    set nocount on;
    Declare
    @id_C int
    ,@cDirection nvarchar(150)
    ,@sensA nvarchar(150)
    ,@sensB  nvarchar(150)
    Declare MajCodeMRN cursor for select id_constat,rtrim(ltrim(LgArr))+rtrim(ltrim(Direction))as Dir from inserted;
    Open MajCodeMRN
    fetch MajCodeMRN into @id_C, @cDirection;
     
    while (@@FETCH_STATUS=0)
    Begin
    	--Rechercher les sens
    		set @sensA = (select distinct 
    		t.codeMRN
    		from inserted c left join QSE.dbo.Topo t on rtrim(ltrim(c.lgArr))+rtrim(ltrim(c.Direction)) = rtrim(ltrim(t.lg_Arr))+rtrim(ltrim(t.SensA))
    		where  c.direction is not null and t.Sens =1 and Id_Constat = @id_C)
     
    		set @sensB = (select distinct 
    		t.codeMRN
    		from inserted c left join QSE.dbo.Topo t on rtrim(ltrim(c.lgArr))+rtrim(ltrim(c.Direction)) = rtrim(ltrim(t.lg_Arr))+rtrim(ltrim(t.SensB))
    		where  c.direction is not null and t.Sens =2 and Id_Constat = @id_C)
     
    	--Tester et mettre à jour 	
     
    			if @sensA is not null
    			update Constat
    			set codeMRN = @sensA
    			where Id_Constat =@id_C
     
    			else if @sensB is not null
    			update Constat
    			set codeMRN = @sensB
    			where Id_Constat =@id_C
     
    			Else 
    			update Constat
    			set codeMRN = 'inconnu'
    			where Id_Constat =@id_C
     
    fetch MajCodeMRN into @id_C, @cDirection;
    End;
    close MajCodeMRN;
    deallocate MajCodeMRN;
    End
    ça passe bien quand je fais un test via une requête insert à partir du serveur SQL.
    en revanche quand à partir du client PowerApps, je tente une écriture dans la base, je me fais bouler :

    Nom : IMG_1047.PNG
Affichages : 96
Taille : 330,6 Ko

    si quelqu'un a une idée

    merci

  6. #6
    Membre averti Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Par défaut
    J'ai bien trouvé ça,

    http://www.sql-server-helper.com/err...s/msg-334.aspx

    mais je comme je n'ai pas d'output dans mon trigger, je ne comprends pas trop
    Ou c'est qu'il est implicite.

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

Discussions similaires

  1. [TSQL] Trigger after update
    Par mad_martigan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/07/2010, 11h40
  2. [TSQL] trigger inserted
    Par mous33 dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 31/10/2007, 13h46
  3. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  4. Réponses: 2
    Dernier message: 10/05/2005, 18h15
  5. Trigger Update et Column_Updated
    Par Pm dans le forum Développement
    Réponses: 2
    Dernier message: 16/06/2004, 09h07

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