SQL2008 主键自增
发布网友
发布时间:2022-04-22 08:33
我来回答
共3个回答
热心网友
时间:2022-04-11 17:12
我来给一个完整的方案:
--一个完整的生成流水号解决方案
--步骤1. 创建一张流水号表
--serialNumber是流水号表,每个type每个prefix只有一条记录,保存最新的流水号
create table serialNumber (
[type] varchar(20) not null
,[prefix] varchar(20) not null
,SN int not null
,constraint PK_serialNumber
primary key ([type],[prefix])
);
--步骤2. 创建一个存储过程,根据指定的type和prefix获取最新的流水号
create procere proc_getSN(@type varchar(20),@prefix varchar(20),@sn int output)
as
begin
set transaction isolation level serializable;
begin tran
--更新流水号
update serialNumber set SN=SN+1
where [type]=@type and [prefix]=@prefix;
if @@rowcount=0
begin
insert into serialNumber([type],[prefix],[SN])
values (@type,@prefix,1);
select @sn=1;--这里不要select from serialNumber了,否则会死锁
end
else
begin
select @sn=isnull(SN,0) from serialNumber
where [type]=@type and [prefix]=@prefix;
end
commit;
set transaction isolation level read committed;
end
--步骤3. 创建商品表,测试用。
create table 商品表(
商品编号 int primary key
,类别号 int not null
)
--步骤4. 向商品表中插入数据
--其中类别号为1的话,商品编号为51+5位流水号
--类别号为2的话,商品编号为52+5位流水号
declare @sn int,@i int;
--插入5条类别为1的数据
set @i=0;
while (@i<5)
begin
--获取流水号
exec proc_getSN '商品','51',@sn output;
--插入数据
insert into [商品表]
select '51'+right('00000'+cast(@sn as varchar),5),'1';
set @i=@i+1;
end
--插入3条类别为2的数据
set @i=0;
while (@i<3)
begin
--获取流水号
exec proc_getSN '商品','52',@sn output;
--插入数据
insert into [商品表]
select '52'+right('00000'+cast(@sn as varchar),5),'2';
set @i=@i+1;
end
最终的结果:
serialNumber表:
商品表:
热心网友
时间:2022-04-11 18:30
你这个得用触发器了吧追问不管是触发器还是函数什么的,都可以,我就是想添加一条数据时能实现这样的功能可以么?
热心网友
时间:2022-04-11 20:05
想知道你这样做的意义
sql server 2008 数据表主键自增不连续
这类自增字段是不会去补被删除的记录对应的ID的,就是说系统里记录一个最大值,每次增加记录都在这个值上增长,这类值在应用中不要去考虑让其连续,因为要连续代价太大,相当于重建个表重新生成这个字段值。
SQL数据库的ID怎么设置为自增
以sqlserver2008R2数据库为例。可以用如下方法:1、先建表:create table test (id int not null,name varchar(10))2、在图形界面,找到test表:3、右键此表名,选择“设计”。4、右侧出现的页面,找到要设置主键的列,ID列,然后右键,选择“设置主键”。5、下面一步是要设置自增,在左侧列表中...
SQL Server 2008怎样添加自增列实现自增序号
一、通过T-SQL代码.alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL 这里用到了identity关键字:indentity(a,b),a b均为正整数,a表示开始数,b表示步长,indentity(1,1)就代表从1开始,每次增加1
sql server 2008中id如何设为自增
SQL Server 通过 IDENTITY 来设置 参数有2个,一个是“初始值” 一个是“增量”。默认情况下 INSERT 语句中,不能对 IDENTITY 的字段进行赋值。1> CREATE TABLE test_create_tab2 (2> id INT IDENTITY(1, 1) PRIMARY KEY,3> val VARCHAR(10)4> );5> go 1> INSERT INTO te...
SQL Server 2008怎样添加自增列实现自增序号
SQL 2008与以往版本的用法是一样的。--创建表时添加自增列,且从1开始create table 表名(id int identity(1,1) )--给已存在的表添加自增列,且从1001开始,也可以从1开始alter table 表名add id intidentity(1001,1)
怎样在sql中把主键值设成是自动加1
1、如果你用的是SQL Server数据库,在你设计库表时把Goods_ID字段的数据类型设置为Int,在下面的标识中选择“是”,在标识种子中输入“1”,在标识递增量中输入“1”。这样你的这个Goods_ID字段就可以自动增加1了。2、如果你用的是Access数据库,那才好设置呢,在表中的字段Goods_ID数据类型中选择“自动编号”。3...
sqlserver2008数据库已有数据,现要新增一列(或者修改现有列),使之数值...
加一个标识列,选成自增型的,但你现在不能已有标识列,如有了的把旧的删了。
怎样将ms sql的主键设置为每次自增加1
1.首先,待设置的字段类型一定要是int型的,否则不能设置“标识规范”。2.打开SQL Server,连接数据库,找到目标表,右键,然后点击“设计”。3.单击主键列(或其他需要设置的数据类型为int的列),然后在下方“列属性”中找到“标识规范”,展开。4.在(是标识)下拉栏中选择“是”,然后设置“标识...
sql 表的主键是自增序列,如何解决删除的id...
没有必要,不连续就不连续。干吗必要连续。ID本来就是作为数据的唯一标识用的,只要是唯一的就行,连不连续无所谓。因为如果连续的话,那么你每次删除数据都要进行ID重新排列,这样当数据较多时,会严重影响速度,所以大家都不这样作。
SQ数据库中怎样设置自增主键(sql设置主键自增)
自增列的类型应为int或bigint型,可以设置起始和每次递增数。如:createtable[table1]([id][int]identity(1,1)...)这样每次插入则不需要为主键设置参数,数据库会根据设置的递增条件,自动给出主键值。如以上代码所示,则第一次插入后主键为1,第二次为2,依次递增。需要注意的是:如果这个表中有...