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 :

SP : Synthaxe CASE (switch)


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 196
    Par défaut SP : Synthaxe CASE (switch)
    Bonjour j'essaye de faire une procédure stockée avec un bête switch mais j'ai des erreurs de syntaxe
    Pourriez-vous m'aider
    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
    ALTER FUNCTION [dbo].[GetProductContractSeqNr]
    (
    @TableName as varchar(128)
    @Id as int
    )
    RETURNS int
    AS
    BEGIN
    	DECLARE @ProductContractSeqNr as int 
    	DECLARE @SQL as varchar(8000)	
    	SET @ProductContractSeqNr=NULL	
     
    	SET @SQL='Select @ProductContractSeqNr=ProductContractSeqNr '
    	SET @SQL=@SQL+'From dbo.[@Table] '
     
    	CASE @TableName
    	WHEN 'Toto' THEN
    		SET @SQL=@SQL+' Where Id=' + @ID
    	WHEN 'Tata' THEN
    		SET @SQL=@SQL+' Where Tata_Id=' + @ID
    	END CASE		
    	EXEC (@SQL) 
    	RETURN @ProductContractSeqNr
    END
    Merci

  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 : 44
    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,

    Vous ne pouvez pas récupérer une variable en sortie avec la commande EXEC.
    Vous devez pour cela utiliser la procédure stockée système sp_executeSQL.
    De plus on ne peut pas utiliser la commande EXEC dans une fonction (sauf si vous souhaitez exécuter un procédure stockée étendue).
    Votre CASE est correct mais vous devez le combiner avec un SELECT.
    Que se passe-t-il si le nom de la table n'est ni tata ni toto ?

    Vous devez donc exécuter une procédure stockée, par exemple :

    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
    CREATE PROCEDURE [dbo].[GetProductContractSeqNr]
    		@TableName AS VARCHAR(128),
    		@Id AS INT
    AS
    BEGIN
    	DECLARE @SQL NVARCHAR(512),
    			@ParamDefinition NVARCHAR(128),
    			@ProductContractSeqNr NIT
     
    	SELECT @SQL = 'SELECT @ProductContractSeqNr_OUT = ProductContractSeqNr' +
    					' FROM dbo.' + @TableName + 
    					CASE @TableName
    						WHEN 'Toto' THEN ' WHERE ID = @ID_IN'
    						WHEN 'Tata' THEN ' WHERE Tata_Id = @ID_IN'
    					END,
    			@ParamDefinition = '@ID_IN INT, @ProductContractSeqNr_OUT INT'
     
    	-- Pour éxécution
    	EXEC sp_executeSQL
    		@SQL,
    		@ParamDefinition,
    		@ID_IN = @Id,
    		@ProductContractSeqNr_OUT = @ProductContractSeqNr OUTPUT
     
    	RETURN @ProductContractSeqNr
    END
    Et pour récupérer @ProductContractSeqNr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @myVar INT
    EXEC @myVar = dbo.GetProductContractSeqNr 'toto', 2
    SELECT @myVar
    @++

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 196
    Par défaut
    Merci beaucoup et surtout d'avoir consacrer autant de temps face à un débutant

    je crois que je vais devoir réétudier SQL ca fait longtemps les études

  4. #4
    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 : 44
    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
    On est là pour se filer un coup de main

    Pour vous aider sur SQL, jetez un œil (ou plus !) sur le site de SQLPro

    @++

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

Discussions similaires

  1. [AC-2003] PASS-THROUGH QUERY et synthaxe CASE
    Par apnw7931 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/03/2011, 19h30
  2. problème de case/switch
    Par nicolas.sitbon dans le forum C
    Réponses: 5
    Dernier message: 22/09/2007, 21h00
  3. case switch sans break
    Par virtuadrack dans le forum C
    Réponses: 3
    Dernier message: 18/04/2007, 08h13
  4. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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