SqlServer有3種方式設(shè)置自增列,
創(chuàng)新互聯(lián)是一家專業(yè)提供房山企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站設(shè)計、HTML5、小程序制作等業(yè)務(wù)。10年已為房山眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
SSMS中在圖形化界面中建表時,設(shè)置自動增長的其實值及每次增量。
2. --語句建表時設(shè)置自增列,從1開始增長,每次增加1
create table test(col1 int indentity(1,1,))。
3. --修改列為從1開始增長,每次增加10
alter table test alter col1 int indentity(1,10)。
操作
1、創(chuàng)建一個表?movie,設(shè)置字段 id?具有 identity(1,1),
注:identity(start,step),中的參數(shù)start表示從start開始標(biāo)號,step表示每次遞增的步長數(shù)量
2、當(dāng)我們進行插入操作的時候,便會報如下的錯誤;
注:mysql?上是可以這么操作的;
3、解決方法是,在使用前添加一句
SET IDENTITY_Insert movie ON;
注:SET IDENTITY_Insert?table switch?表示是否允許table表中的
identity?字段的插入操作,On表示允許,Off表示不允許
4、有時候為了安全性,會習(xí)慣性的在操作前,允許,操作后不允許:
5、注:mssql?目前只允許同時只對一張表進行
SET IDENTITY_Insert table?ON;
操作,所以如果考慮到在不同的表之間進行操作的話,
需要先把前一張表給OFF?掉;
identity值
查看當(dāng)前表的indentity的值:
dbcc checkident(table, NORESEED)
其中 table?表示的要查看的表, NORESEED表示不會修改該值,
如下圖查詢到的結(jié)果是3
修改當(dāng)前表的 identity?的值
dbcc checkident(table,RESEED,value)
其中:
table?表示的是要修改的表;
RESEED?表示的是identity的值會被修改;
value?表示的是修改后的值;
如下圖所示,是把值修改成1后,查詢的結(jié)果:
建議通過預(yù)先生成卡號, 然后按順序分配
這樣可以降低程序復(fù)雜度
如何讓SELECT 查詢結(jié)果額外增加自動遞增序號
如果數(shù)據(jù)表本身并不內(nèi)含自動遞增編號的字段時,要怎么做才能夠讓SELECT查詢結(jié)果額外增加自動遞增序號呢?下列五種方法供您參考:
USE test;
GO
/* 方法一*/
SELECT 序號= (SELECT COUNT(客戶編號) FROM 客戶 AS LiMing WHERE LiMing.客戶編號= Chang.客戶編號), 客戶編號,公司名稱 FROM 客戶 AS Chang ORDER BY 1;
GO
/* 方法二: 使用SQL Server 2005 獨有的RANK() OVER () 語法*/
SELECT RANK() OVER (ORDER BY 客戶編號 DESC) AS 序號, 客戶編號,公司名稱FROM客戶;
GO
/* 方法三*/
SELECT 序號= COUNT(*), LiMing.客戶編號, LiMing.公司名稱 FROM 客戶
AS LiMing, 客戶 AS Chang WHERE LiMing.客戶編號= Chang.客戶編號 GROUP BY
LiMing.客戶編號, LiMing.公司名稱 ORDER BY 序號;
GO
/* 方法四建立一個「自動編號」的字段,然后將數(shù)據(jù)新增至一個區(qū)域性暫存數(shù)據(jù)表,然后由該區(qū)域性暫存數(shù)據(jù)表中,將數(shù)據(jù)選取出來,最后刪除該區(qū)域性暫存數(shù)據(jù)表*/
SELECT 序號= IDENTITY(INT,1,1),管道,程序語言,講師,資歷 INTO #LiMing FROM 問券調(diào)查一;
GO
SELECT * FROM #LiMing;
GO
DROP TABLE #LiMing;
GO
/*方法五使用 SQL Server 2005 獨有的ROW_NUMBER() OVER () 語法搭配 CTE (一般數(shù)據(jù)表表達式,就是 WITH 那段語法)選取序號2 ~ 4 的數(shù)據(jù)*/
WITH
排序后的圖書 AS (SELECT ROW_NUMBER() OVER (ORDER BY 客戶編號 DESC) AS 序號,
客戶編號,公司名稱 FROM 客戶) SELECT * FROM 排序后的圖書 WHERE 序號 BETWEEN 2 AND 4;
GO
以sqlserver為例,按照你的要求,先有如下一張表,里面有相關(guān)的數(shù)據(jù),所以可以采用alter
table表名
add
列名
類型
約束。。
如下:
create
table
test(
name
varchar(10),
sex
char(1),
profession
varchar(15)
)
alter
table
test
add
id
int
identity
check(id1
and
id9999)
其中
identity
說明是自增
但是,正常情況下,一張表是有主鍵約束的,你添加id是不是要重新設(shè)置約束呢,關(guān)于這點,可以先alter
table
drop
constraint
約束名。。然后再
alter
table
test
add
id
int
identity
check(id1
and
id9999)
添加主鍵約束。。具體的操作可以參考相關(guān)數(shù)據(jù)庫的幫助文檔