2011-08-20 103 views
1

如何修改此命令以便擁有一個標識列,該標識列具有像00000這樣的五位整數並從00001開始?SQL Server IDENTITY列

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

回答

6

一個整數本身沒有任何前導0。將整數轉換爲字符串以進行顯示時,這是一個格式問題。

如果你真的,真的需要能夠提出這樣的字符串右出SQL的,你可以用一個計算列做到這一點:

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

我永遠不會使用該解決方案自己雖然,格式沒有按不屬於數據存儲區。

+3

關鍵短語是「** **如果你需要能夠呈現這樣的字符串右出SQL的」 ......這聽起來更像是表示層的關注。 – Aaronaught

+1

您可能還想將'PERSISTED'關鍵字添加到您的計算列中,以實際將值存儲在磁盤上,從而顯着提高查詢性能(並允許在該列上編制索引) –

0

你需要自己添加前導零。作爲一種解決方案,您可以添加一個名爲say「formatedID」的其他colomn,並使用來自identity列的值並使用您想要的前導零格式化的「插入觸發器」更新它。

例子:

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

我寧願使用計算列而非觸發。 –