2011-08-20 6 views
1

Comment puis-je modifier cette commande afin d'avoir une colonne d'identité qui a cinq chiffres entiers comme 00000 et qui commence à 00001?Colonne IDENTITY SQL Server

CREATE TABLE [dbo].[Company] 
(
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](200) NOT NULL 
) 

Répondre

6

Un entier n'a pas de 0 principal lui-même. C'est un problème de formatage à traiter lors de la conversion de l'entier en chaîne pour l'affichage.

Si vous avez vraiment, vraiment besoin d'être en mesure de présenter une telle chaîne de droite de SQL, vous pouvez le faire avec une colonne calculée:

CREATE TABLE [dbo].[Company]( 
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [FormattedCompanyId] AS RIGHT('0000'+ CONVERT(VARCHAR,Num),5), 
    [Name] nvarchar NOT NULL, 

Je ne retournerai jamais moi-même solution que, le formatage doesn n'appartient pas au magasin de données.

+3

phrase clé étant « ** ** si vous devez être en mesure de présenter une telle chaîne de droite sur SQL » ... cela semble plus comme une préoccupation de la couche de présentation. – Aaronaught

+1

Vous pouvez également ajouter le mot-clé 'PERSISTED' à votre colonne calculée, pour réellement stocker les valeurs sur le disque et ainsi améliorer considérablement les performances des requêtes (et permettre l'indexation sur cette colonne) –

0

Vous devez vous-même ajouter les zéros en tête. En tant que solution, vous pouvez ajouter un autre nom appelé "formatedID" et le mettre à jour avec un "après insert trigger" avec la valeur de la colonne d'identité et formaté avec les zéros de tête que vous voulez.

Exemple:

CREATE TABLE [dbo].[Company] 
(
    [CompanyId] [bigint] IDENTITY(1,1) NOT NULL, 
    [FormattedID] [VARCHAR(20)], 
    [Name] [nvarchar](200) NOT NULL 
) 

CREATE TRIGGER ON [dbo].[Company] 
FOR INSERT 
AS 
BEGIN 
    UPDATE [dbo].[Company] 
    FROM inserted 
    SET FormattedID = RIGHT('0000'+ CONVERT(VARCHAR, [dbo].[Company].CompanyId),5) 
    WHERE dbo.Company.CompanyId = inserted.CompanyId 

END 
+3

Je préfère utiliser une colonne calculée plutôt qu'une déclencheur. –