SQLServer IDENTITY Столбец с текстом - PullRequest
6 голосов
/ 01 февраля 2010

Как мне создать столбец IDENTITY в SQLServer с текстом в столбце?

Пример:


ABCD-987065
ABCD-987066
ABCD-987067

Ответы [ 8 ]

15 голосов
/ 01 февраля 2010

В дополнение к другим ответам, вы можете создать вычисляемый столбец в таблице, чтобы предоставить то, что вы просите.

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 голос
/ 14 марта 2019
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

1 голос
/ 01 февраля 2010

Вы могли бы увеличить свои строковые значения с помощью функции, подобной этой:

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

Мне любопытно, почему вы хотите использовать буквенно-цифровую клавишу, а нечем просто числовой.

1 голос
/ 01 февраля 2010

Вам не нужно использовать столбец IDENTITY, но вы сами сгенерировали идентификаторы / строки.

Гораздо лучше вместо этого отформатировать столбец IDENTITY для отображения, особенно если строковая часть постоянна для всех записей - делает индексирование / запрос большей производительности и экономит место в БД.

Если записи могут иметь другой строковый раздел (т. Е. Не все начинаются с "ABCD-"), то вы можете сохранить это как отдельное поле.

0 голосов
/ 01 февраля 2010
0 голосов
/ 01 февраля 2010

Нет, но вы можете создать оператор 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 (....);

Конечно, вы можете создать представление, чтобы сделать это для вас или даже для вычисляемого поля. Таким образом, возвращаемое значение встроено в запрос, и вам не нужно помнить, чтобы вводить все это каждый раз.

0 голосов
/ 01 февраля 2010

Нет, извините.Идентификатор «свойство» можно размещать только в столбцах с целочисленным или десятичным типом данных.

0 голосов
/ 01 февраля 2010

Нет. Фактический тип столбца должен быть int или bigint works.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...