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 :

Générer des numéros avec des parametres en sql [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut Générer des numéros avec des parametres en sql
    Salut à tous,

    Je viens vers se soir parce que j'ai créé une table des retraits du pétrole

    Nom : petrole.PNG
Affichages : 691
Taille : 4,2 Ko

    Je voudrais que l'idBon soit généré avec des paramètres sur le mois en cours et l'année en cours, et je ne sais pas s'il est possible de le faire.
    Si c'est le cas, merci de bien vouloir m'orienter.

  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,

    Attention à ne pas utiliser idBon comme identifiant de ligne : ce serait une grossière erreur, parce qu'alors chaque ligne de la table ne serait pas uniquement identifiable.
    Comme on dispose déjà de la date du bon, on peut spécifier une colonne calculée, éventuellement persistée. Soit par exemple la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE bon
    (
    	[date du bon] datetime2(3) NOT NULL
    	, idBon AS
    	(
    		CASE LEN(MONTH([date du bon])) WHEN 1 THEN '0' ELSE '' END
    			+ CAST(MONTH([date du bon]) AS varchar(2)) + CAST(YEAR([date du bon]) AS char(4))
    	)
    )
    Le petit INSERT suivant nous permet d'obtenir ce que l'on recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO dbo.bon ([date du bon]) VALUES (SYSDATETIME())
     
    SELECT	*
    FROM	dbo.bon
    Nom : Capture.PNG
Affichages : 1534
Taille : 17,6 Ko

    Si la valeur de cette colonne va être affichée, vous pouvez ajouter le mot-clé PERSISTED à la suite de la définition de la colonne calculée.
    Et comme elle dépend d'une colonne qui ne devrait à priori pas être NULLable, on doit en fait écrire PERSISTED NOT NULL.
    Si en revanche elle ne sera jamais affichée et ne servira qu'à accélérer des recherches par la pose d'un index, alors on peut se contenter de l'indexer seulement.

    Veillez à ne pas non plus utiliser d'espaces et autre caractères cabalistiques dans le nom de tout identifiant (colonne, table, vue, ...) : cela vous conduira inéluctablement à des problèmes difficilement solubles ...

    @++

  3. #3
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonsoir elsuket et merci je vais appliquer pour voir le fonctionnement

  4. #4
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour elsuket j'ai essayer et je suis déjà rassurer d'une chose c'est possible!
    j'ai encore une inquiétude je voudrais par exemple à chaque fois que je tape un bon générer un numéro unique à chaque bon qui sera ajouter au paramètre moi et année avez une idée? car jusqu'ici tel-que vous l'avez dit plus haut j'utilisait le numéro de la ligne. j'aimerai donc savoir comment je peut générer ce numéro unique à chaque bon qui s'ajoutera au paramètre que vous m'avez aider à créé plus haut merci

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 543
    Points
    52 543
    Billets dans le blog
    5
    Par défaut
    En créant une vue ajoutant ce numéro via la fonction de fenêtrage ROW_NUMBER() par exemple.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    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
    Bonojur,

    L'idéal est que la table dispose d'une colonne de type entier avec la propriété d'auto-incrémentation.
    Une telle colonne peut être utilisée comme clé primaire de la table, ce qui présente principalement deux avantages :

    • La clé primaire de la table est monotone et constamment croissante, ce qui fait que tout ajout de ligne se fera par allocation de nouvelles pages de données.
      L'index sous-jacent et implicitement créé lors de l'ajout de la contrainte de clé primaire ne sera donc que très faiblement fragmenté.
      La seule contrepartie est qu'il est possible qu'on observe des latchs lors de l'allocation de ces pages, mais pour cela il faut insérer vraiment (vraiment vraiment) massivement
    • Les clés étrangères ne portent que sur une seule colonne, qui plus est de type entier, ce qui simplifie l'exécution des jointures


    De là, libre à vous de concaténer ensuite la valeur de cette colonne à la formule sur les dates que vous avez déjà. Sur l'exemple que je vous ai proposé, nous aurions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE bon
    (
    	bon_id int NOT NULL IDENTITY(1, 1)
    		CONSTRAINT PK_bon PRIMARY KEY
    	, [date du bon] datetime2(3) NOT NULL
    	, idBon AS
    	(
    		CASE LEN(MONTH([date du bon])) WHEN 1 THEN '0' ELSE '' END
    				+ CAST(MONTH([date du bon]) AS varchar(2)) + CAST(YEAR([date du bon]) AS char(4))
    				+ '-' + REPLICATE('0', 10 - LEN(bon_id)) + CAST(bon_id AS varchar(10))
    	) PERSISTED NOT NULL
    )
    Avec le même INSERT, on obtient :

    Nom : Capture.PNG
Affichages : 659
Taille : 22,4 Ko

    @++

  7. #7
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Merci grand merci dite mois comment on fait pour avoir autant de connaissance comme vous je vais essayer et vous tenir informé encore merci

  8. #8
    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
    Alors en ce qui me concerne :

    1. Passer du temps sur le forum
    2. Me faire latter par SQLPro un paquet de fois
    3. Lire/écrire les livres sur SQL Server
    4. Lire/écrire les blogs sur SQL Server
    5. Lire/écrire les livres blancs sur les fonctionnalités de SQL Server
    6. L'expérience
    7. Tester, bricoler, bidouiller



  9. #9
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Ok merci Dieu est grand mais vous n’êtes pas petit car ça marche très bien

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

Discussions similaires

  1. [XL-2010] Comment compter des cellules avec des couleurs avec une condition
    Par Aimey dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/11/2015, 03h23
  2. Parser un JSON avec des variables avec des "-" et des ":"
    Par Quentin33 dans le forum Windows Phone
    Réponses: 2
    Dernier message: 22/05/2011, 01h04
  3. Réponses: 4
    Dernier message: 02/04/2008, 17h51
  4. Réponses: 10
    Dernier message: 23/03/2007, 15h28
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 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