2011-08-20 92 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

我宁愿使用计算列而非触发。 –