2010-11-23 6 views

Répondre

0

Utilisez varchar(20) comme type de colonne et générez la valeur de clé primaire à partir du code.

+0

Comment faire ça ....? – user515609

+0

Quand j'utilise. Type de données ..int incrémentielle graine est 100000 et incrément automatique 1 .... mais je veux dans la clé primaire, il montre comme A1/D-M/100000 – user515609

+0

La suggestion d'Adrian est sur place. Je pense que vous n'êtes pas assez à l'aise en SQL pour le faire vous-même, alors peut-être que vous devriez donc plus de lecture sur SQL et VB.NET, et obtenir quelqu'un pour vous aider dans la vraie vie. –

0

Votre requête n'est pas possible dans SQL Server comme demandé, ce qui me donne envie de vous dire de faire plus de lecture.

Cependant, vous pouvez obtenir quelque chose de similaire en créant une clé primaire dans Visual Basic et en stockant cette valeur dans un champ char ou varchar dans SQL, comme suggéré par la réponse d'Adrian Godong.

Cela dit, ce que je ferais si cela était ma base de données, est de créer un PK normal à l'aide int ou bigint (selon le nombre de lignes je prévois de magasin), et en utilisant une deuxième colonne comme char ou varchar, avec un index approprié, pour stocker les valeurs Ax/D-M/xxxxxx. Ce que vous voulez faire est de mélanger les règles métier avec les règles de base de données SQL Server, et c'est une très mauvaise idée. SQL ne se soucie pas de l'aspect de vos données, vous ne devriez donc pas le forcer à le faire. Vos règles d'entreprise peuvent changer à tout moment, ce qui serait beaucoup plus facile à gérer si vous utilisez un PK approprié, qui ne repose pas sur une convention de dénomination arbitraire.

0

Quelles parties de cette clé sont fixes, lesquelles changent d'une ligne à l'autre?

E.g. D'où vient le "A1" ou le "D-M"? Sont-ils les mêmes pour toutes les rangées? Est-ce qu'ils changent de rang en rang ??

Si ces pièces sont fixes, et que le grand nombre au milieu a besoin de changer, vous pouvez:

  • définir une colonne de type ID INT IDENTITY(100000,1) pour le nombre
  • définir une colonne calculée comme ceci:

    ALTER TABLE dbo.YourTable 
        ADD YourPKField AS 'A1/D-M/' + CAST(ID AS VARCHAR(6)) PERSISTED 
    

De cette façon, SQL Server w ould auto-incrémenter votre champ ID et YourPKField contiendrait les valeurs:

A1/D-M/100000 
A1/D-M/100001 
A1/D-M/100002 
A1/D-M/100003 
.... 

et ainsi de suite - automatiquement, sans vous faire quelque chose de plus.

0

Utilisez une ID INTENTION (100000,1) comme clé primaire.
Ajoutez la clé calculée (affichée) où vous en avez besoin (requêtes ...). C'est de la décoration, et en tant que telle, cela fait partie du front-end, pas de vos données.

Questions connexes