代码之家  ›  专栏  ›  技术社区  ›  user113476

带文本的sqlserver标识列

  •  6
  • user113476  · 技术社区  · 15 年前

    如何在sqlserver中创建包含文本的标识列?

    例子:

    ABCD-987065
    ABCD-987066
    ABCD-987067
    
    
    7 回复  |  直到 15 年前
        1
  •  16
  •   Mitch Wheat    15 年前

    除了其他答案,您还可以创建 computed column 在桌子上提供你想要的东西。

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

    或:

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

    (你的问题没有说明前缀是否打算被修复…)

        2
  •  1
  •   AdaTheDev    15 年前

    您不必使用identity列,而是自己生成id/字符串。

    最好是将标识列格式化为显示,特别是如果字符串部分对于所有记录都是常量的话,则会使索引/查询性能更高,并节省DB空间。

    如果记录可能有不同的字符串节(即并非所有以“abcd-”开头),则可以将其存储为单独的字段。

        3
  •  1
  •   Kevin Fairchild    15 年前

    可以使用这样的函数增加字符串值:

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

    不过,我很好奇,为什么你要用字母数字键而不是数字键。

        4
  •  1
  •   Sebastian Brosch Navjyot    5 年前
    CREATE TABLE BikeParts (
        BikeParts_GUID AS 'ABCD-' + RIGHT(REPLICATE('0', 8) + CONVERT(VARCHAR, BikePart_ID), 10),
        BikePart_ID INT IDENTITY(1, 1),
        BikePart_Name VARCHAR(100)
    )
    
    INSERT INTO BikeParts VALUES ('Break Cable')
    INSERT INTO BikeParts VALUES ('Seat Cover')
    INSERT INTO BikeParts VALUES ('Head Light')
    INSERT INTO BikeParts VALUES ('Tail Lamp')
    
    SELECT * FROM BikeParts
    

    enter image description here

        5
  •  0
  •   Randy Minder    15 年前

    不。实际的列类型必须是int或bigint works。

        6
  •  0
  •   Philip Kelley    15 年前

    不,对不起。标识“属性”只能放置在具有整数或十进制数据类型的列上。

        7
  •  0
  •   Mark Brittingham    15 年前

    不,但您可以创建select语句,以返回所需的代码:

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

    这假设表中有一个名为idColumn的列,并且“identity”属性已设置为“true”。也就是说,在sqlservermanagementstudio的表设计器中突出显示该字段,您将在底部看到一个属性窗口。

    如果“abcd”部分可能发生更改,则可以将此值放置在另一个字段中,然后按如下方式检索:

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

    当然,您可以创建一个视图来完成这项工作,甚至还可以创建一个计算字段。这样,返回值就内置在查询中,您不必每次都记住输入所有这些值。

        8
  •  0
  •   Community Neeleshkumar S    7 年前