带有文本的SQLServer IDENTITY列

时间:2010-02-01 15:07:48

标签: sql-server identity

如何在SQLServer中创建IDENTITY列,并在列中添加文本?​​

示例:


ABCD-987065
ABCD-987066
ABCD-987067

8 个答案:

答案 0 :(得分: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)) 
)

(您的问题并未说明是否要修改前缀......)

答案 1 :(得分:1)

您必须不使用IDENTITY列,而是自己生成ID /字符串。

更好地格式化IDENTITY列以进行显示,尤其是当字符串部分对于所有记录都是常量时 - 使索引/查询更高性能并节省数据库空间。

如果记录可能有不同的字符串部分(即并非所有记录都以“ABCD-”开头),那么您可以将其存储为单独的字段。

答案 2 :(得分:1)

您可以使用以下函数增加字符串值:

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

没有。实际的列类型必须是int或bigint也适用。

答案 5 :(得分:0)

不,抱歉。标识“property”只能放在具有整数或十进制数据类型的列上。

答案 6 :(得分:0)

否,但您可以创建Select语句,以便返回所需的代码:

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

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

如果'ABCD'部分可能会发生变化,您可以将此值放在另一个字段中,然后按原样检索:

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

当然,您可以创建一个View来为您或甚至计算字段执行此操作。这样,返回值内置于查询中,您不必记住每次都输入所有这些内容。

答案 7 :(得分:0)