INSERT into MyTab values(DEFAULT,'a','b') 运行错误!什么问题?

iamdan 2003-10-21 11:05:52
我想设计一字段id是自动编号

CREATE DATABASE MyDB
CREATE TABLE [MyTab] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[username] [varchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[password] [varchar] (250) COLLATE Chinese_PRC_CI_AS NULL
)

INSERT into MyTab values(DEFAULT,'a','b')

运行错误!什么问题?系统显示
Server: Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'MyTab' can only be specified when a column list is used and IDENTITY_INSERT is ON.
...全文
398 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamdan 2003-10-21
  • 打赏
  • 举报
回复
alter table 表 add newfield int identity(1,1)

delete 表
where newfield not in(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield

理解其它比较困难,能具体举例吗?
aierong 2003-10-21
  • 打赏
  • 举报
回复
/*
蚂蚁的:去除重复值
如果有ID字段,就是具有唯一性的字段

delect table where id not in (

select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。


2,如果是判断所有字段也可以这样
select * into #aa from table group by id1,id2,....
delete table
insert into table
select * from #aa


3,没有ID的情况

select identity(int,1,1) as id,* into #temp from tabel
delect # where id not in (
select max(id) from # group by col1,col2,col3...)
delect table
inset into table(...)
select ..... from #temp


col1+','+col2+','...col5 联合主键


select * from table where col1+','+col2+','...col5 in (

select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。

2,
select identity(int,1,1) as id,* into #temp from tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)

*/
aierong 2003-10-21
  • 打赏
  • 举报
回复
你得标识种子id是int类型的

int
长度为 4 个字节,存储从 -2.147.483.648 到 2.147.483.647 的数字。

要是还不够你可以用

bigint
长度为 8 个字节,存储从 –2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 的数字。

pengdali 2003-10-21
  • 打赏
  • 举报
回复
1、如果id字段中的值无限增大,比如我删除了id=53的记录,但是下一条记录id仍为54,那么这样越来越大,怎么解决?(比如删除了id=53,那么54就编成53)
不可以,你用bigint类型
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。




2、在一个没有id字段的数据库中,我如何在SQL Query Analyzer中删除指定的一条记录。(比如第53号记录)注意:因为有可能我的2条记录是一样的(比如编程时多添加了一条相同数据),我只要保存其中一条。

删除重复的,只留一条:

alter table 表 add newfield int identity(1,1)

delete 表
where newfield not in(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield
lvcheng606717 2003-10-21
  • 打赏
  • 举报
回复
用default是没有意义的,标识种子的作用就在于此,如果是往里copy数据,可以关掉。
iamdan 2003-10-21
  • 打赏
  • 举报
回复
谢谢上方的朋友们,还有两个问题:
1、如果id字段中的值无限增大,比如我删除了id=53的记录,但是下一条记录id仍为54,那么这样越来越大,怎么解决?(比如删除了id=53,那么54就编成53)

2、在一个没有id字段的数据库中,我如何在SQL Query Analyzer中删除指定的一条记录。(比如第53号记录)注意:因为有可能我的2条记录是一样的(比如编程时多添加了一条相同数据),我只要保存其中一条。
gmlxf 2003-10-21
  • 打赏
  • 举报
回复
INSERT MyTab values('a','b')
INSERT MyTab(username,password) select 'a','b'
sdhdy 2003-10-21
  • 打赏
  • 举报
回复
标识种子你不用管他,它会自动增加的!
yujohny 2003-10-21
  • 打赏
  • 举报
回复
INSERT into MyTab values('a','b')
rocllllll 2003-10-21
  • 打赏
  • 举报
回复
up
shuiniu 2003-10-21
  • 打赏
  • 举报
回复
一般 sql server 不允许显式值插入表的标识列中。
要显示插入
参见 SET IDENTITY_INSERT
welyngj 2003-10-21
  • 打赏
  • 举报
回复
INSERT into MyTab values('a','b')
or INSERT into MyTab select 'a','b'
txlicenhe 2003-10-21
  • 打赏
  • 举报
回复
INSERT into MyTab values('a','b')
INSERT MyTab (username,password) values('a','b')

pengdali 2003-10-21
  • 打赏
  • 举报
回复
INSERT MyTab values('a','b')

或:

INSERT MyTab (username,password) values('a','b')
pengdali 2003-10-21
  • 打赏
  • 举报
回复
INSERT into MyTab values('a','b')

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧