2013-11-22 3 views
1

У меня есть столбец ID, который является автоматическим приращением, а другой столбец Request_NumberПолучения значения идентификатора при вставке

В Request_Number я хочу, чтобы вставить что-то вроде "ISD0000"+ID значения ... например, для первой записи он должен ID 1 и Request_Number " ISD000001 "

Как достичь этого?

+2

что вам нужно * магазин * эта информация? - кажется, что он всегда может быть тривиально (редуцирован). –

+0

Нужно ли _Request_Number_ относиться к столбцу _ID_? Если вам просто нужен уникальный, неизменяемый _Request_Number_, вы можете использовать решение, которое было удалено: INSERT ... SELECT 'ISD0000' + STR (MAX (ID)) ... – Josien

+0

спасибо Josien ... я бы попробовал в качестве резервной копии ... было предпочтительнее использовать идентификатор –

ответ

2

Вы можете использовать вычисляемый столбец:

create table T 
(
    ID int identity primary key check (ID < 1000000), 
    Request_Number as 'ISD'+right('000000'+cast(ID as varchar(10)), 6) 
) 

Возможно, вам также нужно проверочное ограничение, так что вы не переполнение.

0

Это должно работать

UPDATE dbo.TableName 
SET Request_Number = 'ISD' + RIGHT('00000'+ CONVERT(VARCHAR(9),ID),6) 
WHERE Request_Number IS NULL 

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

0
select 'ISD0000'+CONVERT(varchar, IDENT_CURRENT('Tablename')) 
+3

При использовании 'CONVERT' и' varchar', вы должны ** всегда ** определять длину ** для 'varchar' - как долго это 'varchar', ваш будет, максимум? –

+0

На самом деле нет ограничения, указанного в вопросе. Если я не упомянул размер, он может быть включен от 0 до максимального предела символов varchar. – sreejithsdev

+2

Да да - но ** как долго ** будет ваш 'varchar', если вы не укажете длину? Если вы используете 'CONVERT (varchar (10), ..', это ясно - максимум 10 символов, но если вы используете' CONVERT (varchar, ... 'без длины - что вы ожидаете - как долго может получиться результат varchar 'be ??? Не полагайтесь на удачу или по умолчанию - ** укажите ** длину, тогда ясно, что вы делаете! –

2

Если у вас есть определение таблицы уже на месте, вы можете изменить столбец и добавить столбец компьютерного помечен как сохранялись как:

ALTER TABLE tablename drop column Request_Number; 
ALTER TABLE tablename add Request_Number as 'ISD00000' + CAST(id AS VARCHAR(10)) PERSISTED ; 

Если вычисляемый столбец не помечен как сохраняется, он не создан когда столбец создан, на самом деле он все еще вычисляется во время выполнения. После того как вы пометили столбец как сохраненный, он сразу вычисляется и сохраняется в таблице данных.

[Изменить]:

ALTER TABLE tablename drop column Request_Number; 
ALTER TABLE tablename add Request_Number as 'ISD' 
+right('000000'+cast(ID as varchar(10)), 6) PERSISTED ; 
+0

будет ли это работать действительно ??? – Dhaval

+0

Да, но я хотел бы спросить, почему это не так? любая причина .. что я не хватает ?? – Deepshikha

+0

Это не значит, что вы что-то пропустили. На самом деле я не знал, что это можно сделать. +1 для обучения мне это – Dhaval

Смежные вопросы