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 :

procédure stockée auquel je souhaiterais ajouter un champ automatiquement


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Points : 101
    Points
    101
    Par défaut procédure stockée auquel je souhaiterais ajouter un champ automatiquement
    bonjour j'ai une procédure stockée auquel je souhaiterais ajouter un champ automatiquement

    je m'explique si debut(qui est une date de la forme DD/MM/AAAA) est passée, insertion de la valeur 1 par exemple dans la colonne TIME(bool), si la date est future on est met 0...


    Comment est ce que je pourrais faire ça s'il vous plait ?

    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
    USE [Intranet]
    GO
    /****** Object:  StoredProcedure [dbo].[SP_get_latest_id]    Script Date: 10/05/2011 16:23:55 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[SP_get_latest_id] 
           @objet Varchar(max),      
           @debut Varchar(max),
           @fin Varchar(max),      
           @heure  Varchar(max),
           @duree  Varchar(max),
           @description Varchar(max),
           @lieu  Varchar(max),
           @idRDV INT OUTPUT   
     
    AS  
        INSERT INTO rendezvous ( objet,debut,fin,heure,duree,description,lieu) VALUES
        (@objet,@debut,@fin,@heure,@duree,@description,@lieu) 
     
     
     
          SELECT @idRDV = @@IDENTITY


    Voici la méthode qui sert pour la Procédure stockée:
    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
     
         public static int Get_last_id(string objet, string debut, string fin, string Duree, string Heure, string Description, string Lieu)
            {
                // Create Instance of Connection and Command Object
                SqlConnection myConnection = new SqlConnection();
                myConnection.ConnectionString = DA.DAConnexion.connectionString;
                SqlCommand myCommand = new SqlCommand("SP_get_latest_id", myConnection);
                myConnection.Open();
                // Mark the Command as a SPROC
                myCommand.CommandType = CommandType.StoredProcedure;
     
                // Add Parameters to SPROC
                SqlParameter parameterobjet = new SqlParameter("@objet", SqlDbType.Char, 50);
                parameterobjet.Value = objet;
                myCommand.Parameters.Add(parameterobjet);
     
                SqlParameter parameterdebut = new SqlParameter("@debut", SqlDbType.Char, 20);
                parameterdebut.Value = debut;
                myCommand.Parameters.Add(parameterdebut);
     
                SqlParameter parameterfin = new SqlParameter("@fin", SqlDbType.Char, 20);
                parameterfin.Value = fin;
                myCommand.Parameters.Add(parameterfin);
     
                SqlParameter parameterduree = new SqlParameter("@duree", SqlDbType.Char, 5);
                parameterduree.Value = Duree;
                myCommand.Parameters.Add(parameterduree);
     
                SqlParameter parameterheure = new SqlParameter("@heure", SqlDbType.Char, 5);
                parameterheure.Value = Heure;
                myCommand.Parameters.Add(parameterheure);
     
                SqlParameter parameterdescription = new SqlParameter("@description", SqlDbType.Char, 200);
                parameterdescription.Value = Description;
                myCommand.Parameters.Add(parameterdescription);
     
                SqlParameter parameterlieu = new SqlParameter("@lieu", SqlDbType.Char, 15);
                parameterlieu.Value = Lieu;
                myCommand.Parameters.Add(parameterlieu);
     
     
                SqlParameter id = myCommand.Parameters.Add(new SqlParameter("@idRDV", SqlDbType.Int, 10));
                id.Direction = ParameterDirection.Output;
                myCommand.ExecuteNonQuery();
                int ReturnMessage = int.Parse(myCommand.Parameters["@idRDV"].Value.ToString());
     
     
                myConnection.Close();
     
                return ReturnMessage;
     
     
            }

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Bonjour,

    Je pense pas que tu trouveras beaucoup d'aide la dessus sur le forum C#
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    avec un CASE je pense mais bon les spécialistes des requetes ca se trouve sur les Forum SGBD
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    En dehors du fait que ta question relève de Sql Server et pas du tout de C#/.Net, l'utilisation des Varchar pour stocker les dates, ça fait frémir

    Sinon, comme déjà dit, un CASE ... WHEN .. ELSE doit te permettre de faire cela, ou tout simplement des IF ... END IF;

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    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,

    Voici, comme l'avaient dit BenoitM et BlueDeep, bien que je ne voie pas où est la colonne time, qui est par ailleurs un mot-clé réservé (remplacé par ze_time dans le code ci-dessous) :

    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
    ALTER PROCEDURE [dbo].[SP_get_latest_id] 
           @objet Varchar(max),      
           @debut Varchar(max),
           @fin Varchar(max),      
           @heure  Varchar(max),
           @duree  Varchar(max),
           @description Varchar(max),
           @lieu  Varchar(max),
           @idRDV INT OUTPUT
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	INSERT	INTO dbo.rendezvous
    	(
    		objet
    		, debut
    		, fin
    		, heure
    		, duree
    		, description
    		, lieu
    		, ze_time
    	)
    	SELECT	@objet
    		, @debut
    		, @fin
    		, @heure
    		, @duree
    		, @description
    		, @lieu
    		CASE
    			WHEN CONVERT(datetime, @debut, 103) < GETDATE() THEN CAST(1 AS bit)
    			ELSE CAST(0 AS bit)
    		END 
     
          SELECT @idRDV = SCOPE_IDENTITY()
    END
    En outre, comme l'a noté BlueDeep :

    - Je ne comprendrai jamais l'intérêt que l'on peut avoir à stocker des dates dans une chaîne, qui plus est un LOB (varchar(max) : 2GB maximum)).
    Une date avec une précision à 3 millisecondes se stocke dans une variable ou une colonne de type datetime qui occupe 4 octets : 2 pour la date, et deux pour l'heure.
    Une date seule se stocke sous le type date, on est à 3 octets.
    Dans les deux cas c'est bien moins que les 10 octets que vous consommez dans un varchar (un octet par caractère), en étant en plus dans l'impossibilité d'utiliser les fonctions de date directement !

    - idem pour presque tous les autres paramètres en varchar(max)
    - si le choix des types de données des colonnes à été proprement fait dans la table dbo.rendezvous, votre code n'étant absolument pas défensif, comment vous assurez-vous de la qualité des données ?
    - si le choix des types de données des colonnes correspond à ce que vous avez en entrée, alors c'est encore pire, autant au niveau du stockage des valeurs que de la qualité des données
    - Vous n'avez pas qualifié la table cible de l'INSERT par le nom du schéma auquel elle appartient, qui est dbo, ce qui oblige SQL Server à le chercher pour vous et à réaliser un certain nombre d'autres vérifications de sécurité.
    Évidemment celles-ci se font très vite et c'est donc de l'ordre du pouillème, mais des pouillèmes et des pouillèmes, ça peut parfois faire beaucoup
    Je vous renvoie sur les articles de Linchi Shea sur ce sujet.

    - La fonction @@IDENTITY peut vous retourner des valeurs qui ne correspondent pas à la transaction, et vous pouvez la remplacer par SCOPE_IDENTITY()

    Bref, RTFM !

    @++

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Remarquez il a tout aussi bien typé dans son code client... tout est string pour le coups c'est sa fête...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. Ajouter un champ automatique
    Par darkreen dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 28/01/2014, 16h55
  2. Réponses: 8
    Dernier message: 25/01/2011, 16h45
  3. Ajout de champs automatique sur la colonne A
    Par cedill23 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2010, 14h29
  4. ajout de champs automatique
    Par king10481 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/04/2008, 13h02
  5. Formulaire, ajout de champs automatique
    Par shub dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 12h55

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