2013-11-22 2 views
1

Мне нужно периодически обновлять таблицу SQL Server, вставляя в нее новые записи.SQL Server - как обновить столбец идентификатора после вставки новых записей

Стол имеет столбец ID в виде Company0001 через Company0020 прямо сейчас.

Предположим, я добавил в таблицу одну запись новой компании. Я хочу заполнить столбец ID Company0021 для этой новой записи. Может ли кто-нибудь предложить способ сделать это?

Большое вам спасибо!

+0

что это ?? Вы ищете автоинкремент? если да, то измените таблицу и добавьте ограничение автоинкремента – Ashish

+0

Спасибо, но нет. Я не хочу использовать идентификатор (который, как я предполагаю, означает то, что вы подразумеваете под автоинкремент) для столбца ID. Я хочу сохранить формат «Companyxxxx» как идентификатор, где часть «xxxx» продолжает увеличиваться при вставке новых записей. – user3016270

+0

'ALTER TABLE tablename ADD CompanyID AS 'Company' + CAST (ID AS VARCHAR (4)) PERSISTED' – Ashish

ответ

2

Я бы настоятельно рекомендовал использовать столбец идентификации. Идентичность - это механизм, разработанный и используемый для этой фактической цели, и поэтому было бы намного лучше с точки зрения производительности.

Тем не менее, если вы настаиваете на идентификаторах в формате «CompanyXXX», я бы предложил использовать столбец varchar. Затем вы добавите триггер в операции вставки и обновления. Когда запускается триггер, он будет обнаруживать последний «CompanyXXX» и формировать новый. Если вам нужна помощь в отношении триггеров, вы можете проверить this tutorial.

Надеюсь, я помог!

0

В случае решение требуется, как, имея только один столбец со значениями в нужном формате можно создать функцию, как:

create table table1(id varchar(100)); 
Go 

create function dbo.fn_GetCompanyIdentity() 
returns varchar(100) 
as 
begin 
declare @CompanyIdentify varchar(100); 

select @CompanyIdentify = 
     (select 'Company' +   
     right ('00000' + cast (
           (
           ( 
           case when Not exists (select ROW_NUMBER() over(order by (select 1)) from Table1) then 1 
           else (select top 1 ROW_NUMBER() over(order by (select 1)) as currentRownumber from Table1 order by currentRownumber desc) + 1 
           end 
           ) 
           ) 
           as varchar(4)) 
       ,4)); 
return @CompanyIdentify; 
end; 
go 

, а затем использовать функцию вставки заявления, как:

insert into Table1 (id) 
select dbo.fn_GetCompanyIdentity(); 
Go 

Надеюсь, что это поможет!

+0

кто дал -1? Этот ответ почти прав. – Ashish

+1

'ALTER TABLE tablename ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (id); ALTER TABLE tablename AUTO_INCREMENT = 00001; ' И затем' ALTER TABLE tablename ADD CompanyID AS 'Company' + CAST (ID AS VARCHAR (4)) PERSISTED; 'лучший подход – Ashish

1

Мое предложение было бы иметь поле автоинкремента, а затем объединить название компании с идентификатором.

Если вы не хотите делать это с полем идентификатора, вы хотите, чтобы это произошло автоматически или вы собираетесь управлять им вручную? Если вы автоматически, вам нужно написать триггер, чтобы перехватить INSERT и изменить там значение. Не должно быть слишком сложно сделать.

Я бы серьезно не рекомендовал НЕ делать это и идти по пути автоинкремента. Лучше.

0

Почему вы просто не создаете колонку с автоматическим приращением, а затем объединяете «Company» в эту колонку в другой колонке. А для презентации просто выберите «Компания + автоинкремент».

1

Добавить еще один столбец в таблицу провести целое значение (в данном примере SNO), а затем написать запрос в

declare @SNo int 

select @SNo=max(SNo)+1 from Table_Name 

insert into Table_Namevalues (@SNo,'company'+right('0000'+cast(@SNo as varchar(10)),4)) 

А потом посмотреть результат

Надеется, что это помогает

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