『壹』 sqlserver 資料庫id設置自增之後如何錯誤輸入也會造成id自增
自增長就是這樣的,除非程序來自動計算id,保證id連續無跳空
『貳』 sqlserver以主鍵為基準去重
DELETEa
FROMtable1a
(
SELECT*,ROW_NUMBER()OVER(PARTITIONBYguid/*同一guid*/ORDERBYcolumn1DESC/*NEWID()不能隨機保留因為有完全重復的數據可能會被清空*/)n
FROMtable1b
)xONa.guid=x.guidANDa.column1=x.column1ANDa.column2=x.column2ANDa.column3=x.column3
WHEREx<>1/*保留n=1的那條數據即n<>1的都刪除*/
『叄』 sql的自增列如何重置
--操作的過程中,注意一點,標識列自增是不能修改的,那麼首先
--去除該列自增的標識,然後再修改id,成功修改後,再加上標識
--r如果不修改標識,會報錯:「無法更新標識列」
create table #a
(ids int,
names varchar(100)
)
--插入測試數據,序號從100開始的,表示你當前表的情況
declare @a int
set @a=100
while @a<200
begin
insert #a(ids)
select @a
set @a=@a+1
end
--假定還有一個#b表也引用了該序號
--插入測試數據到#b
select ids n_id,names ff into #b from #a
--好,現在開始處理序號問題了,用臨時表#tmp過渡
--這里用了一個標識列,請注意!
--將帶一個新的序列的數據插入到表#tmp中
select identity(int,1,1) flag, * into #tmp from #a
--看看結果是不是有了新的序列了,呵
select * from #tmp
--那麼現在就利用#tmp表來更新所有用到該序列的表
--更新#a
update #a set ids=flag from #a a,#tmp b where a.ids=b.ids
--更新其他表引用了該序列的,比如#b
update #b set n_id=flag from #b a,#tmp b where a.n_id=b.ids
『肆』 SQLserver 修改原來的默認值
你用法不對
首先你要在左側的樹里找到你的表名,然後展開,然後找約束
比如下圖所示
altertable表名addconstraintDF__TEST__ID__14F1071CDEFAULT(('默認值'))for欄位名--這里DF__TEST__ID__14F1071CDEFAULT你可以重新起名的
『伍』 如何讓sqlserver自增列重新從1開始算起
dbcc checkident('test',reseed,0) ;
insert into test values(55);
select * from test
顯示結果:
id msum
1 55
新插入的數據自增列從1開始,原有的數據保持不變。
『陸』 sql server id 重置
執行
truncate table 表明
可以 清楚所有表中記錄 自增列 重置 成1 開始
表 還在
但是 如果表中有外鍵約束 就不行 最省事的辦法如下:
(從外鍵表 開始 刪除)
右鍵點擊表→編寫表腳本為→DROP和CREATE到→新查詢編輯器窗口
執行~
『柒』 sqlserver2005里的數據表,id刪除一些數據後,如何讓id從1重新開始添加數據
關鍵你的想法根本沒有任何價值。第一:如果重新規劃標識那麼可能出現重復的ID
主要是
DBCC CHECKIDENT ('表名', RESEED, 種子值) 這個怎麼用的問題!你的想法還是可以滿足的!
------------------------------------------
看如下過程:
USE [NTE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_A](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
delete from dbo.T_A
--這就能保證從1開始
DBCC CHECKIDENT ('dbo.T_A', RESEED, 0)
insert into dbo.T_A
select '華萍HP401針線盒' union all
select '推薦魔術師黑色棉服(80)' union all
select '小螞蟻保暖拼色圓領套Z103(140)' union all
select '小螞蟻保暖拼色圓領套Z103(150)' union all
select '技術部測試產品' union all
select '品勝(PISEN)「快易充」快速充電器套裝' union all
select '品勝(PISEN)「小靈充」快速充電器套裝' union all
select '品勝(PISEN)「標准充」充電電池充電器套裝' union all
select '品勝(pisen)BN1數碼電池' union all
select '品勝LP-E6數碼電池' union all
select '品勝BP511數碼電池' union all
select '品勝EN-EL9' union all
select '品勝FORPSP110數碼電池' union all
select '品勝S005E數碼電池' union all
select '品勝(PISEN)數碼攝像機/相機充電器Li40B/EL10/NP45(通用)' union all
select '推薦蝴蝶結雪紡邊牛仔裙L(黑)'
select * from dbo.T_A
--刪除前四個!
delete from dbo.T_A where id<5
--規劃標識從一開始
DBCC CHECKIDENT ('dbo.T_A', RESEED, 0)
--插入五個吧! 那編號5就重復了!
insert into dbo.T_A
select '華萍HP401針線盒' union all
select '推薦魔術師黑色棉服(80)' union all
select '小螞蟻保暖拼色圓領套Z103(140)' union all
select '小螞蟻保暖拼色圓領套Z103(150)' union all
select '技術部測試產品'
select * from dbo.T_A
--
最後的查詢結果是:看看編號 5 是不是重復了!
1 華萍HP401針線盒
2 推薦魔術師黑色棉服(80)
3 小螞蟻保暖拼色圓領套Z103(140)
4 小螞蟻保暖拼色圓領套Z103(150)
5 技術部測試產品
6 品勝(PISEN)「快易充」快速充電器套裝
7 品勝(PISEN)「小靈充」快速充電器套裝
8 品勝(PISEN)「標准充」充電電池充電器套裝
9 品勝(pisen)BN1數碼電池
10 品勝LP-E6數碼電池
11 品勝BP511數碼電池
12 品勝EN-EL9
13 品勝FORPSP110數碼電池
14 品勝S005E數碼電池
15 品勝(PISEN)數碼攝像機/相機充電器Li40B/EL10/NP45(通用)
16 推薦蝴蝶結雪紡邊牛仔裙L(黑)
5 技術部測試產品
『捌』 SQLserver id直接的演算法
---演算法:記錄個位數2的數據之間的間距createbyyouhaoxinqin2014-7-810:50updatebyyouhaoxinqin2014-7-813:44
createtabledemo(
SSCIDintidentity(1,1),
SSCISSUEnvarchar(200),
SSCNOint
)
--初始數據
insertintodemo(SSCISSUE,SSCNO)values('270070401-001',36642)
insertintodemo(SSCISSUE,SSCNO)values('270070401-002',12738)
insertintodemo(SSCISSUE,SSCNO)values('270070401-003',93873)
insertintodemo(SSCISSUE,SSCNO)values('270070401-004',32579)
insertintodemo(SSCISSUE,SSCNO)values('270070401-005',93914)
insertintodemo(SSCISSUE,SSCNO)values('270070401-006',82309)
insertintodemo(SSCISSUE,SSCNO)values('270070401-007',58517)
insertintodemo(SSCISSUE,SSCNO)values('270070401-008',98172)
insertintodemo(SSCISSUE,SSCNO)values('270070401-009',90320)
insertintodemo(SSCISSUE,SSCNO)values('270070401-010',35304)
insertintodemo(SSCISSUE,SSCNO)values('270070401-011',96748)
insertintodemo(SSCISSUE,SSCNO)values('270070401-012',30941)
insertintodemo(SSCISSUE,SSCNO)values('270070401-013',36642)
insertintodemo(SSCISSUE,SSCNO)values('270070401-014',12738)
insertintodemo(SSCISSUE,SSCNO)values('270070401-015',93872)
insertintodemo(SSCISSUE,SSCNO)values('270070401-017',32579)
insertintodemo(SSCISSUE,SSCNO)values('270070401-018',93912)
insertintodemo(SSCISSUE,SSCNO)values('270070401-019',82302)
insertintodemo(SSCISSUE,SSCNO)values('270070401-020',58522)
insertintodemo(SSCISSUE,SSCNO)values('270070401-021',98172)
insertintodemo(SSCISSUE,SSCNO)values('270070401-022',90320)
insertintodemo(SSCISSUE,SSCNO)values('270070401-023',35304)
insertintodemo(SSCISSUE,SSCNO)values('270070401-024',96748)
insertintodemo(SSCISSUE,SSCNO)values('270070401-025',30922)
--檢索數據
select*fromdemowhereSSCNOlike'%2'
--創建全局臨時表
createtable##remmber_id_no(
remmberkeyintidentity(1,1),
idint,
noint
)
--創建全局臨時表
createtable##remmber_id_no2(
remmberkeyintidentity(1,1),
idint,
noint
)
--創建偏移數據
insertinto##remmber_id_no2(id,no)values(0,0)
--將演算法數據存入兩個全局臨時表
declaredemo_cursorcursorforselectsscid,sscnofromdemo
go
opendemo_cursor
declare@idint
declare@noint
declare@countint
set@count=0
fetchnextfromdemo_cursorinto@id,@no
while@@FETCH_STATUS=0
begin
select@count=COUNT(*)fromdemowhereSSCID=@idandSSCNOlike'%2'
if(@count>0)
begin
insertinto##remmber_id_no(id,no)values(@id,@no)
insertinto##remmber_id_no2(id,no)values(@id,@no)
end
fetchnextfromdemo_cursorinto@id,@no
end
closedemo_cursor
deallocatedemo_cursor
--得出id距離
select(t.id-t2.id)asID距離from
(select*from##remmber_id_nowhereremmberkeynotin(selecttop1remmberkeyfrom##remmber_id_no))ast,
(select*from##remmber_id_no2whereremmberkeynotin(selecttop1remmberkeyfrom##remmber_id_no2))ast2
wheret.remmberkey=t2.remmberkey
droptable##remmber_id_no
droptable##remmber_id_no2
『玖』 如何重裝sqlserver
SQLServer2000可以在添加/刪除程序裡面刪除,然後重裝,2005以上版本要刪注冊表的
『拾』 sqlserver 自增列ID最大值是多少如果達到最大值,系統將如何處理
自增列沒有最大值這一說法,只有數據類型有最大值這一說法。
比如smallint,int,bigint,
bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
int -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647),
假設
test int identity(1,1),那麼這個test將在達到int的最大值(2,147,483,647)時溢出。
而如果出現溢出,則報錯。這個時候要麼將列改為最大值更大的列例如bigint,要麼重置種子,重新計數。