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 :

Incrémentation Automatique d'un numéro


Sujet :

Développement SQL Server

  1. #1
    Inactif  
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Incrémentation Automatique d'un numéro
    Bonjour Forum,
    j'espere que vous allez bien?
    je veux faire l'incrementation automatique d'un numero uniquement lorsque la valeur dans la colonne compteur change.
    retrouvez mes diferentes colonnes
    Nom : Capture d’écran (2).png
Affichages : 106
Taille : 7,7 Ko

    j'ai ecris ce code ci dessous, mais je suis bloqué. Veuillez s'il vous plait 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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    USE [SR_PROD]
    GO
     
    /****** Object:  StoredProcedure [dbo].[_My_NumLot]    Script Date: 29/11/2021 14:09:17 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
     
     
     
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date, ,>
    -- Description:	<Description, ,>
    -- =============================================
    ALTER PROCEDURE [dbo].[_My_NumLot]
    (
    	-- Add the parameters for the function here
    	@Mag nvarchar(50),@Art nvarchar(50)
    )
    -- RETURNS NVARCHAR(50)
    AS
    BEGIN
    	-- 
    	DECLARE @Cpt BIGINT
    	Declare @Res as nvarchar(50)
    	declare @varsession varbinary(128)
        declare @myValue varchar(10)
    	declare @mystr as nvarchar(50)=''
    	declare @car as nvarchar(1)
    	declare @i as int
    	declare @lg as int
        --lecture de la valeur de compteur dans le contexte
    	select @myValue=cast(substring(ci,1,10) as varchar(10))
        from (select ci=context_info()) t
    	--Verification de la valeur et gestion du NULL
    	print concat('contexte = ', @myValue)
    	set @myValue=isnull(@myValue,'0')
     
    	-- Nettoyage de la chaine
    	set @lg=len(@myValue)
    	set @i=1
    	set @mystr='0'
    	while (@i<=@lg) begin
    	 --
    	  set @car=SUBSTRING( @myValue,@i,1)
    	  if @car in ('0','1','2','3','4','5','6','7','8','9') set @mystr=@mystr+@car
    	 --
    	 set @i=@i+1
    	 --
    	end/*while*/
     
    	-- incrementation de la valeur
    	set @Cpt=isnull(cast(@mystr as bigint),0)+1
    	print concat('compteur= ',@Cpt)
    	--Sauvegarde du contexte
    	set  @myValue=cast(@Cpt as varchar(10))
    	--set  @myValue=concat('T',@Cpt)
    	set @varsession=cast(@myvalue as binary(10))
    	set context_info @varsession
    	--
    	-- select Name=cast(substring(ci,1,10) as varchar(10))  from (select ci=context_info()) t
    	-- set @cpt=10
    	-- Generation de la chaine
    	SELECT @Res=
    	case when @art='1' then 
    		  CONCAT(@mag, REPLICATE('0',6-LEN(COUNT(*)+@Cpt)),COUNT(*)+@Cpt)
    		 when @art='FDT-PRT002' then 
    		 CONCAT('PRET', REPLICATE('0',6-LEN(COUNT(*)+@Cpt)),COUNT(*)+@Cpt)
    	when @art='C-SEC' then 
    		 CONCAT(@Mag, REPLICATE('0',6-LEN(COUNT(*)+@Cpt)),COUNT(*)+@Cpt)
    	when @art='FDT-PRT001' then 
    		 CONCAT(@Mag, REPLICATE('0',6-LEN(COUNT(*)+@Cpt)),COUNT(*)+@Cpt)
    	else '' end
    	FROM OBTN WHERE ItemCode= @art
     
    	-- Return the result of the function
    	--RETURN @res
    	select @Res as 'Result'
     
    END
     
     
    GO

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il suffit d'utiliser une fonction fenêtrée telle que RANK() ou DENSE_RANK

  3. #3
    Inactif  
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Il suffit d'utiliser une fonction fenêtrée telle que RANK() ou DENSE_RANK

    ces fonctions ne reglent pas le probleme,
    je m'explique Clairement ...
    j'ai fais une concatenation pour obtenir un numero de lot de produits.
    Lorsque le Compteur change de chiffre , mon numero doit s'incrementer en ajoutant +1

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bonjour,
    De ce que je comprends ...

    2 solutions :

    1) Soit il faut juste quand la valeur compteur change, donc pour la 1ère occurrence uniquement , faire telle ou telle action ... dans ce cas peut-être passer par un TRIGGER ?
    avec un NOT EXISTS (si plusieurs occurrences donc on ne fait aucune action )

    2) Soit tenir compte de ce max(compteur) pour la concaténation d'un champ dans une autre table et là je ne vois pas le soucis ...


    ytia225 ? L'une de mes 2 propositions se rapproche de ce que tu cherches ? ou je suis dans les choux

    Laurent
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Inactif  
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2021
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Laurent , effectivement ici il s'agit d'insérer un TRIGGER dans le code demandant :
    si Numéro du compteur change fais (+1) dans le cas contraire répliquer le même numéro précédent.

    puis-je avoir un squelette de Code me permettant d'effectuer cette action

  6. #6
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Je ne pratique pas les triggers au quotidien mais je pensais à quelque chose dans ce genre là,
    =>
    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
     
    USE master
    GO
    CREATE TRIGGER TriggerStudent
    ON dbo.Student
    AFTER INSERT
    AS
    BEGIN
    	DECLARE
    		@FirstName nchar(30),
    		@LastName nchar(30),
    		@CollegeID int
    	SELECT @FirstName= INSERTED.[First Name],
    			@LastName= INSERTED.[Last Name],
    			@CollegeID= INSERTED.[College ID]
    			FROM INSERTED
    	IF NOT EXISTS(SELECT * FROM dbo.StudentID WHERE CollegeID= @CollegeID)
    	BEGIN
    		INSERT INTO dbo.StudentID(
    		[First Name], [Last Name], CollegeID)
    		VALUES(@FirstName, @LastName, @CollegeID)
    	END
    	ELSE
    		PRINT('Record Already Exists in the StudentID table')
    END
    Maintenant il faut adapter / tester sous Sql Server et revenir vers les spécialistes de ce forum si ça ne fonctionne comme prévu
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

Discussions similaires

  1. [XL-2010] incrémentation automatique de deux numéros de série en vba
    Par Serge621 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/04/2020, 23h23
  2. [XL-2003] Incrémentation automatique d'un numéro identifiant
    Par titou8333 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2010, 23h38
  3. Réponses: 6
    Dernier message: 19/01/2010, 16h30
  4. [AC-2003] incrémentation automatique d'un numéro
    Par jerem2007 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/05/2009, 15h29
  5. [MySQL] Incrémentation automatique de numéro en PHP
    Par nita2006 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 15/01/2008, 17h30

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