sql server 自動增長

2021-06-20 06:01:23 字數 1488 閱讀 9473

問題:在實際業務處理中有些單號需要自動增長,但又不能用自增列代替,可能格式不相同。

eg:  p031106001   -- 第一位p表示採購單,031106表示日期,後三位是流水號。 

/* 1:建立測試用的表結構 */

create table tablename(pono char(10),b int)

go/* 2:建立乙個得到當前日期的檢視,為下面的自字義函式作準備 */

create view vgetdate

asselect getdate() as today

go/* 3:用自定義函式來得到單號(因自定函式內不能用getdate()來得到當前日期,要用到上面的檢視) */

create function getdh()

returns char(10)

asbegin

declare @dh1 char(10),@dh2 char(10)

select @dh1 = max(pono) from  tablename 

set @dh1 = isnull(@dh1,p000000000) 

select @dh2 = left(@dh1,1) + right(convert(varchar(8),today,112),6) + 001 from vgetdate

if @dh1 >= @dh2

begin

set @dh2 = left(@dh1,7) + right(000+ cast(cast(right(@dh1,3) as int)+1 as varchar),3)

end    

return(@dh2)

endgo

/* 4:在字段預設值中填入 dbo.getdh() */

alter table tablename add constraint df_tablename_1 default(dbo.getdh()) for pono

-/* 5:測試:*/

insert tablename(b) values(1)

insert tablename(b) values(2)

select * from tablename

-- 測試結果

pono       b           

---------- ----------- 

p031115001 1

p031115002 2

總結:此方法運用到了一些小技巧

1:用字段預設值來實現單號自增

2:用自定義函式來得到欄位的預設值

3:因在自定義函式中不能用getdate()之類非確定的函式,用檢視來得到當前日期

sql server left()函式:

取乙個字串的前若干位

select left('abcdefg', 3)

輸出: abc

也可以用select left(field, 3) from table

輸出這個表中所有資料field列的前三個字元

關於SQL Server自動增長字段

sql server自動增長字段在建表的時候一般語法是 field name int identity 1,1 not null 欄位名 起始值 增長值 我們在插入資料的時候,不用標明自動增長字段,它的值會自動增長.有些時候,我們需要把另外整理出來的資料 臨時表 插入含自動增長欄位的表裡.就需要乙個...

SQL Server中重置或設定自動增長的序列

自動增長 序列,一般用來當做id 使用。為了解決系統自增序列達到上限後系統出現問題,可以設定重置來解決。dbcc checkident table name noreseed 檢視當前表的序列的值,table name為表名 dbcc checkident table name reseed,1 重...

SQL Server 自動增長清零的方法

方法1 複製 如下 truncate table tablename 刪除表中的所有的資料的同時,將自動增長清零。如果有外來鍵參考這個表,這個方法會報錯 即便主鍵表和外鍵表都已經沒有資料ftiaz 請參考方法2。ps 用delete刪除資料,自動增長不會清零的哦。方法2 複製 如下 dbcc che...