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

MS SQL Server Discussion :

Générer des codes d'activation avec SSIS ou SQL SERVER 2005


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Par défaut Générer des codes d'activation avec SSIS ou SQL SERVER 2005
    Bonjour !

    Est -il possible de générer un certain nb d'enregistrements (par ex 10 000) dans une table Matable (nid,sserialnumber,ncode) avec des valeurs aléatoires non redondantes de 10 chiffres pour le serialnumber et pour le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Ex:
    nID        sserialnumber       ncode
     
    1           8745125487         658789512
    2           1235478954         145874596
    3           9996655212         666548745
    .                      .                     .
    .                      .                     .
    .                      .                     .
    mais sans utiliser une interface web juste avec SQL SERVER ou SSIS ???

    d'avance merci

  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 : 43
    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
    Par défaut
    Bonjour,

    Je vous propose le très tordu code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH 
    	CTE_RANDOM (Random, Indice) AS
    	(
    			SELECT REVERSE(REPLACE(SUBSTRING(CAST(ABS(CAST(CAST(NEWID() AS VARBINARY) AS BIGINT)) AS VARCHAR), CAST(RAND() * 10 AS INT), 10), '0', CAST(CAST(RAND() * 10 AS TINYINT) AS CHAR(1)))), 1
    		UNION ALL
    			SELECT REVERSE(REPLACE(SUBSTRING(CAST(ABS(CAST(CAST(NEWID() AS VARBINARY) AS BIGINT)) AS VARCHAR), CAST(RAND() * 10 AS INT), 10), '0', CAST(CAST(RAND() * 10 AS TINYINT) AS CHAR(1)))), Indice + 1
    			FROM CTE_RANDOM
    			WHERE Indice < 10000
    	)
    SELECT Random
    FROM CTE_RANDOM
    WHERE Random NOT LIKE '0%'
    OPTION (MAXRECURSION 0)
    Il est un peu abscons mais il a le mérite de produire des nombres assez aléatoires.

    @++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 23
    Par défaut
    Merci elsuket !!

    comment faire pour insérer les nombres directement dans une table 'Matable' ??

    d'avance merci

  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 : 43
    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
    Par défaut
    Bonjour,

    Essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH 
    	CTE_RANDOM (Random, Indice) AS
    	(
    			SELECT REVERSE(REPLACE(SUBSTRING(CAST(ABS(CAST(CAST(NEWID() AS VARBINARY) AS BIGINT)) AS VARCHAR), CAST(RAND() * 10 AS INT), 10), '0', CAST(CAST(RAND() * 10 AS TINYINT) AS CHAR(1)))), 1
    		UNION ALL
    			SELECT REVERSE(REPLACE(SUBSTRING(CAST(ABS(CAST(CAST(NEWID() AS VARBINARY) AS BIGINT)) AS VARCHAR), CAST(RAND() * 10 AS INT), 10), '0', CAST(CAST(RAND() * 10 AS TINYINT) AS CHAR(1)))), Indice + 1
    			FROM CTE_RANDOM
    			WHERE Indice < 10000
    	)
    INSERT INTO maTable (maColonne)
    SELECT Random
    FROM CTE_RANDOM
    WHERE Random NOT LIKE '0%'
    OPTION (MAXRECURSION 0)
    @++

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Pas mal !

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    Bonjour, je remonte ce vieux sujet, car il m'a bien aidé, mais j'ai un soucis de performance avec une contrainte supplémentaire : l'unicité.

    Pour le moment, j'ai créé une procédure qui me retourne un code unique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE PROC GETUNIQUENEWCODE
    @test varchar(12) OUTPUT
    as
    BEGIN
    declare @cpt int;
    select @cpt=1;
    WHILE(@cpt > 0)
    BEGIN
    	select @test = SUBSTRING(CAST(ABS(CAST(CAST(NEWID() AS VARBINARY) AS BIGINT)) as varchar),0,12)
    	select  @cpt = count(*) from Code where COD_CODE_SECRET = @test
    END
    RETURN 0
    END
    Cependant cette procédure va perdre de plus en plus en performance au fur et à mesure de la quantité de code en base.
    La volumétrie étant de deux millions de codes par ans environ...

    Existe-t-il des mécanismes intégré à SQL server pour faire mieux ?

    J'ai bien pensé à la contrainte d'unicité sur colonne, mais elle ne s'applique bien sur qu'après l'insertion, et la gestion du code erreur me parait hasardeuse...

    Les contraintes sont :
    - je dois avoir un code secret unique et non prévisible pour chaque ligne insérée, de 12 caractères numériques

    la génération d'un ensemble de code se fait par lot de 50,000 environ, raison de mon interrogation sur les performances...

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/09/2009, 18h13
  2. Réponses: 0
    Dernier message: 30/09/2009, 18h13
  3. Probleme de droit avec une connexion sql server 2005
    Par mduarte dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/08/2007, 10h12
  4. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57
  5. [ODBC] Problème avec odbc et sql server 2005
    Par scaleo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/10/2005, 09h49

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