Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 23/10/2011, 18h24   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 6
Points : 6
Par défaut [MS-SQL] Clé primaire personnalisable

Bonjour à tous

Voilà j'ai un petit problème, j'aimerai savoir comment je pourrais créer une clé primaire personnalisable, par exemple chaque enregistrements devrais avoir une clé primaire commençant par B1 suivis de chiffre ou de lettre peut importe c'est uniquement le début qui importe.


Merci à ceux qui prendront le temps de me répondre, bonne journée.

pitipilot
pitipilot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 07h44   #2
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
Et quel est le problème (a part que c'est idiot bien sûr...) que vous rencontrez?

Créez la table avec la colonne, définissez la comme clé primaire puis ajoutz vos données avec INSERT?
__________________
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 00
Vieux 24/10/2011, 08h28   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 6
Points : 6
Bonjour, mon problème est que j'envoie depuis plusieurs BDD plusieurs enregistrement dans une même Bdd via des jobs. Je verifie le bon fonctionnement des jobs en regardant la concordance des clés primaires. Sauf qu'il faudrait des clés primaires associés à chaque BDD émettrice car sinon, on peut imaginer d'avoir des enregistrements contenant la même PK dans la BDD réceptrice.
Voilà pourquoi il me faudrait un type de clé primaire par BDD émettrice

Bonne journée
pitipilot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 08h30   #4
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
Faites une clé composite:

Une Colonne stockant la provenance des données(nom de la base etc) une autre représentant la clé primaire au sein de la base de données.
__________________
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 00
Vieux 24/10/2011, 10h06   #5
Invité régulier
 
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 6
Points : 6
Citation:
Envoyé par iberserk Voir le message
Faites une clé composite:

Une Colonne stockant la provenance des données(nom de la base etc) une autre représentant la clé primaire au sein de la base de données.
Effectivement, c'est ça l'idée mais le truc c'est que mes jobs fonctionne sur une seule colonne contenant la clé primaire, travailler sur deux colonnes reviendrais à changer ma PK sur la première BDD emettrice qui fonctionne déjà.

Il n'y a pas un moyen d'ajouter le nom de la BDD dans la PK directement ?

Merci pour vos réponses
pitipilot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 11h10   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Il suffit de créer deux colonnes, l'une avec ce que vous imposez et l'autre avec un auto incrément par exemple.

Ensuite vous pouvez concaténer les eux dans une vue !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 16h42   #7
Invité régulier
 
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 6
Points : 6
Citation:
Envoyé par SQLpro Voir le message
Il suffit de créer deux colonnes, l'une avec ce que vous imposez et l'autre avec un auto incrément par exemple.

Ensuite vous pouvez concaténer les eux dans une vue !

A +
Le truc c'est que j'ai créer des jobs génériques, il n'y aurait pas moyen d'ajouter le terme imposé en plus dans la PK à chaque insertion ?
pitipilot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 19h13   #8
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Non et cela viole en sus la première forme normale.
DOnc c'est stupide et ne peut conbduire qu'a des ennuis.

Autre solution, faire une clef sémantique et une clef technique.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2011, 10h28   #9
Invité régulier
 
Inscription : janvier 2011
Messages : 34
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 34
Points : 6
Points : 6
Désolé de ma réponse tardive, j'avais réussi à contourner mon problème mais voilà qu'il se représente à nouveau. Bon dans l'idée j'ai compris maintenant comment faire au niveau de la syntaxe...

Imaginons que j'ai plusieurs champs dont un qui contient ma PK numérotée (1, 2 ,3,...) et un champ vide RecordID par exemple. Je voudrais dans mon trigger instead of insert pouvoir faire par exemple

inserted.RecordID = inserted.PK & B2


je me doute que la syntaxe n'est pas la bonne mais voilà l'idée.

Bonne journée

Pitipilot
pitipilot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 16h37   #10
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
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 670
Points : 8 732
Points : 8 732
Bonjour,

Très sincèrement, vous vous compliquez la vie pour rien.
Comme vous l'a suggéré SQLPro, il suffit de faire cela dans une vue, et il n'est à mon sens nul besoin de stocker une telle valeur, sauf sur le serveur sur lequel vous regroupez tous les résultats.
Vous pouvez pour cela écrire :

Code :
1
2
3
4
5
CREATE VIEW ma_vue
SELECT	@@SERVERNAME AS nom_serveur
	, mesColonnes
FROM	dbo.maTable
...
Ou encore :

Code :
1
2
3
4
5
CREATE VIEW ma_vue
AS
SELECT	SERVERPROPERTY('MachineName') AS nom_serveur
	, mesColonnes
FROM	dbo.maTable
Le même SELECT peut être utilisé dans une procédure stockée, ou encore : vous pouvez spécifier la vue dans la procédure stockée
Si vous avez besoin du nom de la base de données, utiliser DB_NAME().

@++
__________________
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 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h42.


 
 
 
 
Partenaires

Hébergement Web