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 :

Paramètre en OUTPUT qui ne contient aucune valeur


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Paramètre en OUTPUT qui ne contient aucune valeur
    Hello,

    Me revoilà avec encore sûrement une erreur à la con... (que je trouverai probablement 2 min après avoir valider ce message)

    J'ai la procédure suivante :
    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
    CREATE PROCEDURE [dbo].[UP_DOSSIER_INSERT]
        @CLI_ID INT,
        @CTC_ID INT,
        @TDS_ID SMALLINT,
        @ADR_LIVRAISON INT,
        @ADR_FACTURATION INT,
        @DCM_TEXT VARCHAR(256),
        @DOS_ID INT OUTPUT
    AS
    BEGIN
        SET NOCOUNT ON;
     
        INSERT INTO DBO.V_DOSSIER_VDS (CLI_ID, CTC_ID, TDS_ID, DOS_DATE, ADR_LIVRAISON, ADR_FACTURATION, DCM_TEXT)
        VALUES(@CLI_ID, @CTC_ID, @TDS_ID, GETDATE(), @ADR_LIVRAISON, @ADR_FACTURATION, @DCM_TEXT);
     
        SET @DOS_ID = SCOPE_IDENTITY();
     
    END
    Tout simple donc... Juste une insertion dans une vue avec trigger instead of insert car elle porte sur 3 tables différentes mais une seule avec une colonne avec un id auto incrémenté (identity).

    Mais le paramètre @DOS_ID reste invariablement NULL... Je n'arrive pas à voir ce qui cloche... Serait-ce possible que ce soit à cause de la vue ? C'est la seule procédure où je fais un SCOPE_IDENTITY après une insertion sur une vue et c'est la seule où ça ne fonctionne pas...

    Bref... Un indice please ?

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    et avec SELECT @DOS_ID = SCOPE_IDENTITY() ?

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Pareil, toujours NULL.

    Pour info, voici mon script de test de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @DOS_ID INT;
    exec [UP_DOSSIER_INSERT] 22,2,1,2,2,'TEST OUTPUT',@DOS_ID OUTPUT
     
    SELECT @DOS_ID
    Script dans lequel je passe des paramètres qui vont bien et la variable @DOS_ID pour recevoir le paramètre de retour.

    Je fais ensuite le select et j'obtiens NULL. (et donc aucune valeur dans l'application .NET qui utilise cette SP)

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je crois que je viens de tilter !

    SCOPE_IDENTITY est limité au scope en cours (j'suis pas trop sûr de la définition de scope mais bon).

    Comme je le comprends, il cherche donc dans la procédure stockée. Or la valeur insérée dans une colonne identity n'est pas fait dans la procédure stockée mais dans un trigger de la vue. Est-ce possible que le problème vienne de là ?

    Je vais en tout cas tester avec @@IDENTITY pour voir. C'est une variable que j'ai pris l'habitude de ne pas utiliser car, avant de savoir comment utiliser sql server correctement (vous pouvez commencer à préparer les cailloux), on connectait toutes nos applications avec le user sa (vous pouvez lancer les cailloux). Du coup, ça foutait le bordel avec @@IDENTITY évidemment .


    EDIT : Avec @@IDENTITY, cela fonctionne bien. Juste je voudrais confirmation que ça ne pose pas de souci. Je ne voudrais pas que 2 utilisateurs se mélangent les valeurs.

Discussions similaires

  1. [V6] Afficher une case meme si elle ne contient aucune valeur
    Par totoen dans le forum Deski
    Réponses: 3
    Dernier message: 12/07/2011, 09h32
  2. Masquer une vue qui ne contient aucun élément
    Par jca38 dans le forum SharePoint
    Réponses: 1
    Dernier message: 12/07/2009, 14h50
  3. Variable qui ne prend aucune pas de valeur
    Par bdptaki dans le forum Delphi
    Réponses: 3
    Dernier message: 29/04/2007, 16h09
  4. Réponses: 13
    Dernier message: 15/06/2006, 11h31
  5. Réponses: 1
    Dernier message: 05/12/2005, 22h49

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