2017-02-16 65 views
0

我已經創建了一個存儲過程的自動增量編號它返回相同的結果,我不想要的。然後我改變了代碼序列,現在程序按我的預期工作。存儲過程返回結果沒有變化

Create procedure AUTOINCNUM 
as 
begin 
    set nocount on; 

    declare @Value int 
    select @Value = CH_AUTOSERIES from tracker 

    set @value = @value + 1 
    return @value 

    insert into tracker(CH_AUTOSERIES) values(@Value) 
end 

這個程序工作正常

Create procedure AUTOINCNUM 
as 
begin 
    set nocount on; 

    declare @Value int 
    select @Value = CH_AUTOSERIES from tracker 
    set @value = @value + 1 

    insert into tracker(CH_AUTOSERIES) values(@Value) 
    return @value 
end 
+4

我看到的唯一區別是第一個過程不會在'tracker'表中插入任何東西 - 這是因爲'insert'之前有'return'語句。 –

+1

另外,不要嘗試滾動自己的自動增量。這肯定會失敗。使用sql-server的內置選項,2012+版本的序列對象,或任何版本的簡單標識列。 –

回答

0

1)使用IDENTITY上欄,在那裏你想:我想知道下面的代碼片段的差異

此過程返回相同的結果自動遞增。 2)在新值插入到跟蹤器表之前,第一個proc通過返回完成。 3)強烈建議使用該操作的事務。

IDENTITY列將解決大多數這些問題,請參閱1)。

+0

嗨感謝您的寫作,你可以給我使用身份在計算列im使用像這樣的地方我標記*的那裏我想要使用自動增量請建議創建表格CareHospital(P_id作爲datepart(DAYOFYEAR,getdate())+ * ** +(datepart(year,getdate())) –

+0

嗨,我完全不瞭解你的問題,但你可以看到這個例子:'create table mytest( id int identity not null, tx varchar(10)not null, p_id as datepart(dayofyear,getdate())+ id + datepart(year,getdate())) insert into mytest(tx)values('a')' –