SQL SERVER 自增列
declare @Table_name varchar(60)
set @Table_name = '';
if Exists(Select top 1 1 from sysobjects
Where objectproperty(id, 'TableHasIdentity') = 1
and upper(name) = upper(@Table_name)
)
select 1
else select 0
-- or
if Exists(Select top 1 1 from sysobjects so
Where so.xtype = 'U'
and upper(so.name) = upper(@Table_name)
and Exists(Select Top 1 1 from syscolumns sc
Where sc.id = so.id
and columnproperty(sc.id, sc.name, 'IsIdentity') = 1
)
)
select 1
else select 0
判斷Table是否存在自增列(Identity column),并查出自增列相關(guān)數(shù)據(jù):
declare @Table_name varchar(60)
set @Table_name = '';
資料引用:
declare @Table_name varchar(60)
set @Table_name = 'zy_cost_list';
Select so.name Table_name, --表名字
sc.name Iden_Column_name, --自增字段名字
ident_current(so.name) curr_value, --自增字段當(dāng)前值
ident_incr(so.name) incr_value, --自增字段增長(zhǎng)值
ident_seed(so.name) seed_value --自增字段種子值
from sysobjects so
Inner Join syscolumns sc
on so.id = sc.id
and columnproperty(sc.id, sc.name, 'IsIdentity') = 1
Where upper(so.name) = upper(@Table_name)
DBCC CHECKIDENT
檢查指定表的當(dāng)前標(biāo)識(shí)值,如有必要,還對(duì)標(biāo)識(shí)值進(jìn)行更正。
語(yǔ)法
DBCC CHECKIDENT
( 'table_name'
[ , { NORESEED
| { RESEED [ , new_reseed_value ] }
}
]
)
參數(shù)
'table_name'
是要對(duì)其當(dāng)前標(biāo)識(shí)值進(jìn)行檢查的表名。表名必須符合標(biāo)識(shí)符規(guī)則。有關(guān)更多信息,請(qǐng)參見(jiàn)使用標(biāo)識(shí)符。指定的表必須包含標(biāo)識(shí)列。
NORESEED
指定不應(yīng)更正當(dāng)前標(biāo)識(shí)值。
RESEED
指定應(yīng)該更正當(dāng)前標(biāo)識(shí)值。
new_reseed_value
是在標(biāo)識(shí)列中重新賦值時(shí)要使用的值。
注釋
如有必要,DBCC CHECKIDENT 會(huì)更正列的當(dāng)前標(biāo)識(shí)值。然而,如果標(biāo)識(shí)列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中)創(chuàng)建的,則不更正當(dāng)前標(biāo)識(shí)值。
如果標(biāo)識(shí)列上有主鍵或唯一鍵約束,無(wú)效標(biāo)識(shí)信息可能會(huì)導(dǎo)致錯(cuò)誤信息 2627。
對(duì)當(dāng)前標(biāo)識(shí)值所做的具體更正取決于參數(shù)規(guī)范。
| DBCC CHECKIDENT 語(yǔ)句 | 所做的標(biāo)識(shí)更正 |
|---|---|
| DBCC CHECKIDENT ('table_name', NORESEED) | 不重置當(dāng)前標(biāo)識(shí)值。DBCC CHECKIDENT 返回一個(gè)報(bào)表,它指明當(dāng)前標(biāo)識(shí)值和應(yīng)有的標(biāo)識(shí)值。 |
| DBCC CHECKIDENT ('table_name') 或 DBCC CHECKIDENT ('table_name', RESEED) |
如果表的當(dāng)前標(biāo)識(shí)值小于列中存儲(chǔ)的最大標(biāo)識(shí)值,則使用標(biāo)識(shí)列中的最大值對(duì)其進(jìn)行重置。 |
| DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) | 當(dāng)前值設(shè)置為 new_reseed_value。如果自創(chuàng)建表后沒(méi)有將行插入該表,則在執(zhí)行 DBCC CHECKIDENT 后插入的第一行將使用 new_reseed_value 作為標(biāo)識(shí)。否則,下一個(gè)插入的行將使用 new_reseed_value + 1。如果 new_reseed_value 的值小于標(biāo)識(shí)列中的最大值,以后引用該表時(shí)將產(chǎn)生 2627 號(hào)錯(cuò)誤信息。 |
當(dāng)前標(biāo)識(shí)值可以大于表中的最大值。在此情況下,DBCC CHECKIDENT 并不自動(dòng)重置當(dāng)前標(biāo)識(shí)值。若要在當(dāng)前標(biāo)識(shí)值大于列中的最大值時(shí)對(duì)當(dāng)前標(biāo)識(shí)值進(jìn)行重置,請(qǐng)使用兩種方法中的任意一種:
- 執(zhí)行 DBCC CHECKIDENT ('table_name', NORESEED) 以確定列中的當(dāng)前最大值,然后使用 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 語(yǔ)句將該值指定為 new_reseed_value。
- 將 new_reseed_value 置為很小值來(lái)執(zhí)行 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value),然后運(yùn)行 DBCC CHECKIDENT ('table_name', RESEED)。
結(jié)果集
不管是否指定任何選項(xiàng)(針對(duì)于包含標(biāo)識(shí)列的表;下例使用 pubs 數(shù)據(jù)庫(kù)的 jobs 表),DBCC CHECKIDENT 返回以下結(jié)果集(值可能會(huì)有變化):
Checking identity information: current identity value '14', current column value '14'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
權(quán)限
DBCC CHECKIDENT 權(quán)限默認(rèn)授予表所有者、sysadmin 固定服務(wù)器角色和 db_owner 固定數(shù)據(jù)庫(kù)角色的成員且不可轉(zhuǎn)讓。
示例
A. 如有必要,重置當(dāng)前標(biāo)識(shí)值
下例在必要的情況下重置 jobs 表的當(dāng)前標(biāo)識(shí)值。
USE pubs
GO
DBCC CHECKIDENT (jobs)
GO
B. 報(bào)告當(dāng)前標(biāo)識(shí)值
下例報(bào)告 jobs 表中的當(dāng)前標(biāo)識(shí)值;如果該標(biāo)識(shí)值不正確,并不對(duì)其進(jìn)行更正。
USE pubs
GO
DBCC CHECKIDENT (jobs, NORESEED)
GO
C. 強(qiáng)制當(dāng)前標(biāo)識(shí)值為 30
下例強(qiáng)制 jobs 表中的當(dāng)前標(biāo)識(shí)值為 30。
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
- sqlserver2005自動(dòng)創(chuàng)建數(shù)據(jù)表和自動(dòng)添加某個(gè)字段索引
- SQL Server 打開(kāi)或關(guān)閉自增長(zhǎng)
- SqlServer Mysql數(shù)據(jù)庫(kù)修改自增列的值及相應(yīng)問(wèn)題的解決方案
- SQL Server 2008怎樣添加自增列實(shí)現(xiàn)自增序號(hào)
- SQL Server設(shè)置主鍵自增長(zhǎng)列(使用sql語(yǔ)句實(shí)現(xiàn))
- SQL Server修改標(biāo)識(shí)列方法 如自增列的批量化修改
- Oracle 實(shí)現(xiàn)類(lèi)似SQL Server中自增字段的一個(gè)辦法
- SQL Server 中調(diào)整自增字段的當(dāng)前初始值
- SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法
相關(guān)文章
sqlserver數(shù)據(jù)庫(kù)遷移后,孤立賬號(hào)解決辦法
sqlserver數(shù)據(jù)庫(kù)遷移后,孤立賬號(hào)解決辦法,需要的朋友可以參考下。2011-10-10
SQL?Server無(wú)法連接服務(wù)器的幾種情況分析解決
在我們使用SQL的時(shí)候可能會(huì)遇到無(wú)法連接到服務(wù)器錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于SQL?Server無(wú)法連接服務(wù)器的幾種情況分析解決,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
一條SQL語(yǔ)句修改多表多字段的信息的具體實(shí)現(xiàn)
修改兩張及以上表的時(shí)候,總得需要用幾次語(yǔ)句才修改,萬(wàn)一其中一條沒(méi)修改上,又沒(méi)事務(wù)機(jī)制的話,處理很麻煩,下面為大家介紹下使用一條SQL語(yǔ)句修改多表多字段的信息2014-01-01
MSSQL差異備份取系統(tǒng)權(quán)限的相關(guān)軟件下載
MSSQL差異備份取系統(tǒng)權(quán)限的相關(guān)軟件下載...2007-11-11
sql server中Select count(*)和Count(1)的區(qū)別和執(zhí)行方式
在SQL Server中Count(*)或者Count(1)或者Count([列])或許是最常用的聚合函數(shù)。很多人其實(shí)對(duì)這三者之間是區(qū)分不清的。本文會(huì)闡述這三者的作用,關(guān)系以及背后的原理2015-02-02
SQL數(shù)據(jù)庫(kù)實(shí)例名稱(chēng)找不到或遠(yuǎn)程連接失敗并顯示錯(cuò)誤error40的原因及解決辦法
這篇文章主要介紹了SQL數(shù)據(jù)庫(kù)實(shí)例名稱(chēng)找不到或遠(yuǎn)程連接失敗并顯示錯(cuò)誤error40的原因及解決辦法,需要的朋友可以參考下2015-11-11
sqlserver下將數(shù)據(jù)庫(kù)記錄的列記錄轉(zhuǎn)換成行記錄的方法
sqlserver下將數(shù)據(jù)庫(kù)記錄的列記錄轉(zhuǎn)換成行記錄的方法分享,需要的朋友可以參考下。2011-07-07

