Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/10/2011, 16h26   #1
Membre du Club
 
Inscription : juillet 2011
Messages : 202
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 202
Points : 65
Points : 65
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 :
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 :
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;
 
 
        }
arngrimur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 16h28   #2
Membre chevronné
 
Homme Maxime PALMISANO
Étudiant
Inscription : juin 2011
Messages : 379
Détails du profil
Informations personnelles :
Nom : Homme Maxime PALMISANO
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juin 2011
Messages : 379
Points : 741
Points : 741
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/
MaximePalmisano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 16h39   #3
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 200
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 200
Points : 1 781
Points : 1 781
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
BenoitM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 16h47   #4
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 352
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 352
Points : 9 745
Points : 9 745
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 18h46   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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 :
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 !

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/10/2011, 19h04   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h15.


 
 
 
 
Partenaires

Hébergement Web