關於SQL Server自動增長字段

2021-07-31 10:57:31 字數 1672 閱讀 8961

sql server自動增長字段在建表的時候一般語法是:

[field_name] [int] identity (1,1) not null ,

|  | |

欄位名 

起始值  增長值

我們在插入資料的時候,不用標明自動增長字段,它的值會自動增長.

有些時候,我們需要把另外整理出來的資料(臨時表)插入含自動增長欄位的表裡.

就需要乙個小小的設定:

set identity_insert target_table on

這樣才能把(臨時表)插入含自動增長欄位的表裡, 例如:

set identity_insert dept on

insert into dept(deptno,dname,loc) select deptno,dname,loc from dept_yu where deptno=15 

檢視有自動增長欄位的表名sql寫法:

select table_name, ident_current(table_name) as ident_seed

from information_schema.tables

where ident_seed(table_name) is not null;

更詳細一些檢視資料庫下所有含標記種子的sql:

select a.name table_names, b.name column_names,

ident_incr(a.name) as ident_current, ident_incr(a.name) as ident_incr,

ident_seed(a.name) as ident_seed,

ident_incr(a.name) + ident_current(a.name) next_identity_number

from sysobjects a, syscolumns b

where a.id = b.id

and b.autoval is not null

order by a.name 

ident_current 函式返回為任何會話和任何作用域中的特定表最後生成的標識值。

@@identity 返回為當前會話的所有作用域中的任何表最後生成的標識值。

scope_identity 返回為當前會話和當前作用域中的任何表最後生成的標識值。

在用select into 生成臨時表的時候,也可以用自動增長函式identity(int,起始值,增長值).

例如:select emp_id as emp_num,

fname as first_name,

minit as middle_name,

lname as last_name,

identity(int, 1000, 1) as job_num,

job_lvl as job_level,

pub_id,

hire_date

into employees

from employee

用匯出匯入工具轉移含自動增長欄位的表後,自動增長,主鍵約束,索引等不會跟著轉移,需要再次設定.

如果刪除了某含自動增長字段表裡的某些值以後,要重設種子的起始值,例如從1000開始:

use mydatabase

godbcc checkident (mytable, reseed, 1000)go

sql server 自動增長

問題 在實際業務處理中有些單號需要自動增長,但又不能用自增列代替,可能格式不相同。eg p031106001 第一位p表示採購單,031106表示日期,後三位是流水號。1 建立測試用的表結構 create table tablename pono char 10 b int go 2 建立乙個得到當...

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