关于主键获取自增值?(100分+100%结贴)
下面这个例子可以使No字段在插入时,自动得到Id自增的值,但是把NO设为主键,插入时就会出错,插入第一条不会出错,插入第二条就会出错。
我的要求就是想用Id为自增,而NO为主键(为了保证不重复,且可以修改)取ID的值作为默认值。
- SQL code
create table aaa( Id int identity(1,1), No int default(isnull(scope_identity(),0)+1), Name varchar(20))insert into aaa(Name) values('a')select * from aaa/*Id No Name----------- ----------- --------------------1 1 a(1 row(s) affected)*/
[解决办法]
- SQL code
create table aaa( Id int identity(1,1), rno as id, Name varchar(20))insert into aaa(Name) values('a')insert into aaa(Name) values('a')insert into aaa(Name) values('a')select * from aaadrop table aaa
[解决办法]
No列改为NOT NULL就可以了
- SQL code
create table aaa( Id int identity(1,1), No int default(isnull(scope_identity(),0)+1), Name varchar(20))
[解决办法]
[解决办法]
[解决办法]
在於 isnull(scope_identity(),0) ,第一次插入的候有自增值那按 0 算,退出管理器,登重新行的候 也是 有自增值的,那重新按 0 ,肯定有,道 1 3 不能解?
[解决办法]
你登到SQL管理器,意新建一查窗口 select scope_identity() 看就知道了。
於你最新的插入句,其 scope_identity() 就相於在新窗口查到的。
[解决办法]
主你可以用自增列做主,同可以自己加一流水控制,更改的候去更新流水,自增列不要,似:
1 DTS2012072501
2 DTS2012072502
更新後的流水。
[解决办法]
直接实现没办法,其实在No字段上建唯一索引即可,
这样就保证"不重复",且"可以修改"了.如下代码,
- SQL code
create table bbb( Id int identity(1,1) primary key, No int default(isnull(scope_identity(),0)+1) unique, Name varchar(20))insert into bbb(Name) values('a')insert into bbb(Name) values('a')select * from bbb/*Id No Name----------- ----------- --------------------1 1 a2 2 a(2 row(s) affected)*/
[解决办法]
No int default(isnull(scope_identity(),0)+1)
我电脑上试这种没有什么效果,是乱的,一会2,一会4,一会3。
测试因为是连续的,所以看不出来。
还是用小三的 no int as id 这个不错。
[解决办法]
- SQL code
先创建表 CREATE TABLE ttt ( id int IDENTITY (1, 1) NOT NULL , noid int primary key NOT NULL ) 添加一个触发器,CREATE TRIGGER tri_insert ON ttt after INSERTASbegin update ttt set noid=inserted.id from inserted where ttt.id=inserted.idend在插入数据后将id的值赋给noid列(插入数据默认给noid的值为0,规避主键不能为空),这样就可以了并且支持update noid列样例 insert into ttt(noid) values(0);select id,noid from ttt1 12 24 45 5
------解决方案--------------------
SCOPE_IDENTITY 只返回插入到当前作用域中的值
[解决办法]
SCOPE_IDENTITY 只返回插入到当前作用域中的值
[解决办法]
不知道····看看后面有没有高手··
[解决办法]
create table bbbl11
( Id int identity(1,1),
No int default(IDENT_CURRENT('dbo.bbbl11')) PRIMARY KEY,
Name varchar(20))
insert into bbbl11(Name) values('a')
insert into bbbl11(Name) values('a')
select * from dbo.bbbl11
[解决办法]
create table bbbl11
( Id int identity(1,1),
No int default(IDENT_CURRENT('dbo.bbbl11')) PRIMARY KEY,
Name varchar(20))
insert into bbbl11(Name) values('a')
insert into bbbl11(Name) values('a')
select * from dbo.bbbl11
[解决办法]