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 :

Plusieurs requêtes T-SQL dans une fonction


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 71
    Points
    71
    Par défaut Plusieurs requêtes T-SQL dans une fonction
    Bonjour,

    Je me demandais si il était possible de faire plusieurs requêtes t-sql dans une fonction.
    J'ai déjà effectué ce genre de chose sous postgreSQL mais il semblerait que ce soie diffrérent sous SQL server 2005.

    je pensais à quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE FUNCTION inscription(@mail varchar(30), @code varchar(50))
    RETURNS int
    AS
    BEGIN
       DECLARE @id int
     
       INSERT INTO ma_table VALUES ('@mail') -- un identifiants est généré.
     
       @id = recupérer l'id de l'élement insérer?
     
       INSERT INTO autre_table values('@code', @id) --@id étant une FK vers la PK de ma_table
       RETURN 1
    END
    Est-ce que cette méthode est valable?
    y'en a-t-il une meilleure?

    Je vous remercie d'avance,

    Axel M.

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Est-ce que cette méthode est valable?
    Il ne faut pas confondre procédure stockée et fonction.
    Vous ne pouvez pas mettre d'ordre INSERT / UPDATE / DELETE pour les raisons que j'énonce ici

    Mettez le code de votre fonction dans une procédure stockée, en utilisant soit un paramètre de type OUTPUT soit la commande RETURN, comme dans votre fonction.

    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
    -- RETURN
    CREATE PROC maProc
    	@monParam INT
    AS
    BEGIN
    	...
    	RETURN @uneVariable
    END
     
    DECLARE @val INT
    EXEC @val = monSchema.maProc @uneValeurDeMonParam
    SELECT @val
     
    -- OUTPUT
    CREATE PROC maProc
    	@monParam INT,
    	@uneVariable INT = NULL OUTPUT
    AS
    BEGIN
    	...
    	SELECT @uneVariable = ...
    END
     
    DECLARE @val INT 
    EXEC monSchema.maProc @uneValeurDeMonParam, @val OUTPUT
    SELECT @val
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @id = recupérer l'id de l'élement insérer?
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @id = SCOPE_IDENTITY()
    Si la colonne clé primaire de votre table est de type entier et a la propriété de compteur

    @++

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 71
    Points
    71
    Par défaut
    Tout d'abord un grand merci.
    le code découlant de vos conseille fonctionne,
    Voici ce que j'obtiens:
    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
     
    ALTER PROCEDURE [dbo].[web_inscription] 
    (
    	@email		varchar(100),
    	@password	varchar(50),
    	@prenom		varchar(50),
    	@nom		varchar(50),
    	@sexe		int,
    	@civil		int,
    	@etude		int,
    	@status		int,
    	@experience	int,
    	@connu		int,
    	@code		varchar(50) 
    )
    AS
    BEGIN
    	DECLARE @ind_code int
    	INSERT INTO individu 
    	(
    	 ind_email,
    	 ind_password,
    	 ind_prenom,
    	 ind_nom,
    	 sex_code,
    	 etaciv_code,
    	 nivetu_code,
    	 stapro_code,
    	 exppro_code,
    	 conate_code
    	)
    	VALUES
    	(
    	 @email,
    	 @password,
    	 @prenom,
    	 @nom,
    	 @sexe,
    	 @civil,
    	 @etude,
    	 @status,
    	 @experience,
    	 @connu
    	)
    	SELECT @ind_code = SCOPE_IDENTITY()
     
    	INSERT INTO code_mail (codmai_libelle, ind_code)
    	VALUES	(@code, @ind_code)
    END
    Si vous avez d'autres remarques elles sont les bienvenue.

    Encore merci.

    Axel M.

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    N'oubliez pas de qualifier le nom des objets que vous manipulez par le nom du schéma auquel ils appartiennent, comme votre procédure stockée web_inscription: dbo.

    @++

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

Discussions similaires

  1. [MySQL] Requête sql dans une fonction php
    Par profilien dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/03/2015, 08h02
  2. Réponses: 51
    Dernier message: 20/08/2013, 16h44
  3. requête sql dans une fonction
    Par Monsieur Griboux dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/05/2013, 19h40
  4. [PHP 5.0] Exécuter une requête SQL dans une fonction Javascript
    Par PrinceMaster77 dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2011, 04h53
  5. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37

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