2013-11-22 116 views
1

我需要定期通過向其中插入新記錄來更新SQL Server表。SQL Server - 插入新記錄後如何更新ID列

該表格現在有一個ID列,格式爲Company0001Company0020

比方說,我在表中添加了一個新公司的記錄。我想填寫Company0021這個新記錄的ID列。任何人都可以建議一種方法來做到這一點

非常感謝!

+0

是什麼這個 ??你在尋找自動增量?如果是,則更改表並添加約束自動增量 – Ashish

+0

謝謝,但沒有。我不想使用ID列的身份(我認爲這是您的自動增量意味着什麼)。我想保留「Companyxxxx」的格式爲ID,其中「xxxx」部分隨着插入新記錄而不斷增加。 – user3016270

+0

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

回答

2

我強烈建議使用標識列。身份是一種爲實際目的而設計和使用的機制,因此在性能方面會更好。不過,如果你堅持格式爲'CompanyXXX'的ID,我會建議使用一個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

我的建議是有一個自動增量字段,然後連接公司名稱和ID。

如果您不想使用ID字段進行操作,您希望它自動發生,還是要手動管理它?如果自動執行,則需要編寫一個觸發器來截獲INSERT並在其中更改值。不應該太難做。

我會認真地建議不要這樣做,並沿着自動增量領域的路徑。這更好。

0

爲什麼不建立一個自動增量列,然後將「公司」連接到另一列中的此列。併爲演示文稿選擇「公司+自動增量」欄。

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)) 

然後看看結果

希望這有助於

相關問題