2010-02-01 8 views

Répondre

0

Non Le type de colonne réelle doit être un entier ou bigint fonctionne aussi.

+0

Merci. Voulez-vous préciser un peu comment créer une telle colonne? Ou peut-être fournir une référence à ce que vous avez déclaré? –

0

Non, désolé. L'identité "propriété" peut uniquement être placée sur des colonnes avec le type de données entier ou décimal.

+0

Merci. Voulez-vous préciser un peu comment créer une telle colonne? Ou peut-être fournir une référence à ce que vous avez déclaré? –

+0

Celui-ci dépend totalement de la nature de la valeur clé primaire dont ils ont besoin - c'est-à-dire, qu'est-ce qu'ils veulent mettre comme "ABCD", et pourquoi, et comment est-il déterminé, et ... cela a conduit à Une série de questions de conception, et comme hier était une journée très occupée au travail, j'ai choisi de ne pas suivre. (Ok, aussi c'était une réponse facile, et cette fois je voulais la réponse rapide et pas la bonne/robuste.) –

0

Non, mais vous pouvez créer votre instruction Select de telle manière à retourner le code que vous voulez:

Select 'ABCD-' + Cast(IdColumn as varchar) as IdColumn From MyTable Where (....); 

Cela suppose que vous avez une colonne appelée IdColumn dans votre table et que la propriété « identité » a été défini sur "true". C'est-à-dire, mettez en évidence le champ dans le concepteur de table de SQL Server Management Studio et vous verrez une fenêtre pour les propriétés en bas.

Si la partie « ABCD » peut changer, vous pouvez placer cette valeur dans un autre champ, puis récupérer comme si:

Select PrefixField + '-' + Cast(IdColumn as varchar) as IdColumn From MyTable Where (....); 

Vous pouvez, bien sûr, créer une vue de le faire pour vous ou même un champ calculé aussi bien. De cette façon, la valeur de retour est intégrée à la requête et vous n'avez pas besoin de vous souvenir d'entrer tout cela à chaque fois.

+0

Autrement dit, en supposant que la partie 'ABCD' ne s'incrémente pas automatiquement (mais je suppose Cela fait). – Codesleuth

+0

Ahh je vois. Joli tour. Merci Mark. –

+1

Codesleuth - comment "ABCD" incrémenterait-il? étiez-vous en supposant que c'était un numéro HEX? Avec le tableau de bord présent, j'ai pensé que c'était un préfixe fixe. J'ai changé ma réponse, cependant, pour gérer les changements dans le préfixe. –

1

Vous ne devez pas utiliser une colonne IDENTITY, mais vous avez généré les ID/chaînes vous-même. Il vaut mieux mettre en forme la colonne IDENTITY pour l'affichage, surtout si la partie chaîne est constante pour tous les enregistrements, ce qui augmente l'efficacité de l'indexation/requête et économise de l'espace db.

Si les enregistrements peuvent avoir une section de chaîne différente (c'est-à-dire pas tous commençant par "ABCD-"), vous pouvez les stocker dans un champ distinct.

12

En plus des autres réponses, vous pouvez créer un computed column sur la table pour fournir ce que vous demandez.

CREATE TABLE dbo.MyTable 
(
    Id int NOT NULL PRIMARY KEY, 
    CombinedId AS 'ABCD-' + CAST(Id as varchar(16)) 
) 

Ou:

CREATE TABLE dbo.MyTable 
(
    Id int NOT NULL PRIMARY KEY, 
    PrefixField varchar(16), 
    CombinedId AS PrefixField + CAST(Id as varchar(16)) 
) 

(Votre question ne dit pas si le préfixe est destiné à être fixé ou non ...)

+0

Est-ce que le downvoter s'il vous plaît laissez un commentaire. Merci. –

+0

Les colonnes incluses dans l'ID combiné doivent-elles être devant la colonne 'combinedId'? – MeRuud

1

Vous pouvez augmenter vos valeurs de chaîne avec une fonction comme ceci:

http://www.sqlservercentral.com/scripts/Miscellaneous/31448/

Je suis curieux, cependant, wh Vous cherchez à utiliser une clé alphanumérique plutôt qu'une clé numérique.

+0

Le déclassement d'un lien vers SQL Server? –

0
+0

Oh mon dieu! Comment ose-je suggérer une solution et obtenir anonymement downvoted (comme d'autres personnes ici) – gbn

+1

Je ne vois aucune raison de vous voter, votre réponse se rapporte à la question. certaines personnes je ne sais pas comment ils pensent. ramener à la normale – Kronass