‘壹’ 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,要么重置种子,重新计数。