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 :

Context_Info Null dans les transactions [2008R2]


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut Context_Info Null dans les transactions
    Bonjour,

    J'ai un problème avec Context_Info.

    Mes programme utilisent tous le même utilisateur Sql pour se connecter à la base.
    J'ai malgré tout besoin de savoir qui se connecte pour pouvoir géré des historiques via des triggers. Pour ce faire je met le nom de l'utilisateur ainsi que le nom du programme dans le Context et je récupère l'info depuis mes triggers.

    Ca fonctionne super bien, sauf si j'ai des transactions.
    Mon besoin est donc de savoir si il y a moyen de garder le même context dans une transaction ou si il y a un moyen de contourner le problème.

    Bonne soirée.

  2. #2
    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 : 43
    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
    Par défaut
    Bonjour,

    Le test suivant fonctionne pourtant :

    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
    CREATE TABLE test
    (
    	i tinyint
    )
    GO
     
    CREATE TABLE test_history
    (
    	i tinyint
    	, date_time datetime NOT NULL
    		CONSTRAINT DF_test_history DEFAULT (GETDATE())
    	, context varbinary(128)
    )
    GO
     
    CREATE TRIGGER TR_AI_test
    	ON dbo.test
    AFTER INSERT
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	INSERT INTO dbo.test_history
    	(
    		i
    		, context
    	)
    	SELECT	i
    		, CONTEXT_INFO()
    	FROM	INSERTED
    END
    GO
     
    DECLARE @ctx varbinary(128) = CAST('elsuket' AS varbinary(128))
    SET CONTEXT_INFO @ctx
     
    BEGIN TRANSACTION
    	INSERT INTO dbo.test VALUES (ABS(CHECKSUM(NEWID())) % 10)
    	DELETE FROM dbo.test WHERE i < 5
    	UPDATE dbo.test SET i = 2 * i
     
    	--SET @ctx = CAST('Donpi' AS varbinary(128))
    	SET @ctx = CAST(CAST(SUSER_NAME() AS varchar(64)) AS varbinary(128))
    	SET CONTEXT_INFO @ctx
     
    	INSERT INTO dbo.test VALUES (ABS(CHECKSUM(NEWID())) % 10)
    COMMIT TRANSACTION
     
    SELECT	i
    	, date_time
    	, CAST(context AS varchar(64)) AS contexte
    FROM	test_history
    @++

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Merci pour la réponse.

    Je parie encore que c'est ce Windev de mmmm... qui me fait une variante...

    Aussi tôt que je déclare une transaction mon Context est vidé...
    par contre je ne sais pas si après la transaction il est a nouveau disponible, j’essaie demain.

    Ca ne m’étonnerais pas que ce gang de mauvais créent un connexion différente lorsqu'on utilise une transaction...

    Bon, la suite demain.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Effectivement, Windev crée une nouvelle connexion avec un context différent lorsqu'on utilise les transactions.

    Pour contourner le problème, je réécrit le contenu de mon context systématiquement après ma déclaration de transaction.

    ... C'est null je sais ...

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

Discussions similaires

  1. [1.x] forcer le champ null dans les fixtures
    Par erictomcat dans le forum Symfony
    Réponses: 3
    Dernier message: 16/09/2010, 17h19
  2. Réponses: 3
    Dernier message: 09/03/2009, 09h22
  3. [Websphere Portal] pumaProfile.getCurrentUser() est null dans les Themes WebSphere 6.
    Par madjic_ouf dans le forum Portails
    Réponses: 6
    Dernier message: 23/06/2008, 14h26
  4. Gestion des NULL dans les tables externes
    Par plouf2244 dans le forum Firebird
    Réponses: 1
    Dernier message: 23/03/2006, 16h55
  5. Réponses: 1
    Dernier message: 29/08/2004, 19h45

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