Comment créer une colonne IDENTITY dans SQLServer avec du texte dans la colonne?Colonne IDENTITY SQLServer avec texte
Exemple:
ABCD-987065 ABCD-987066 ABCD-987067
Comment créer une colonne IDENTITY dans SQLServer avec du texte dans la colonne?Colonne IDENTITY SQLServer avec texte
Exemple:
ABCD-987065 ABCD-987066 ABCD-987067
Non Le type de colonne réelle doit être un entier ou bigint fonctionne aussi.
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.
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é? –
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.) –
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.
Autrement dit, en supposant que la partie 'ABCD' ne s'incrémente pas automatiquement (mais je suppose Cela fait). – Codesleuth
Ahh je vois. Joli tour. Merci Mark. –
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. –
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.
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 ...)
Est-ce que le downvoter s'il vous plaît laissez un commentaire. Merci. –
Les colonnes incluses dans l'ID combiné doivent-elles être devant la colonne 'combinedId'? – MeRuud
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.
Le déclassement d'un lien vers SQL Server? –
Vérifiez les réponses ici ...
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é? –