帮我看看这个SQL语句要怎么改!!!!!!!!!!!!

alaigo 2010-01-15 04:33:25
insert into ezReport (ID,name,Buffer) values((select max(ID)+1 from ezReport),'"+ cellName +"','" + buffer +"')

本来设置自增的字段,可是删除后ID不连续了。想用max(字段)+1的方法。可是这个语句我写了后出错。大家帮我改下。

我承认我是菜鸟!!!


实现的功能就是我新插入的这个数据的ID增加1!!!!!!!!!!!


高人啊,快来吧!!!!!!!!!!!!!!!!!!!!!!!

...全文
264 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
昕颖 2010-01-18
  • 打赏
  • 举报
回复
(select count(*)+1 from ezReport)???
可以这样得到吗。你不防去用一个变量先把这个值查出来。在去新增试下。我个人觉得这样是不可能得到值的吧。当然要这样去做的话。首先得把表中的自增列去掉。
YnSky 2010-01-18
  • 打赏
  • 举报
回复
Id.不要代码添加
在数据库设置自增列就行了.
alaigo 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 ouc_ajax 的回复:]
引用 21 楼 alaigo 的回复:
引用 17 楼 ouc_ajax 的回复:
"insert into ezReport select max(ID)+1,'"+ cellName +"','" + buffer +"' +" from ezReport"

不要加上valus


这个不行,因为cellName 和buffer 不在表ezReport中啊!!


cellName 和buffer 不在表ezReport中
没有任何问题啊
构造成了  select '1' from tableName 这种形式
没有问题的!
楼主试试吧。

insert into ezReport (ID,name,Buffer) values((select Math(max(ID)+1) from ezReport),'"+ cellName +"','" + buffer +"')

其实就是这种语句:
insert into tableName select max(id)+1,'name','buffer' from ezReport

不会有问题的!我一直这么用

[/Quote]

不行啊。通不过。唉
alaigo 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 bo_301 的回复:]
"insert into ezReport (ID,name,Buffer) values((select count(*)+1 from ezReport),"+ cellName +"','" + buffer +"')

自增字段应该是int型吧,不用加单引号的,这句SQL应该符合你的要求
[/Quote]
这句不行,估计VALUES不支持子查询吧。运行不过去。
alaigo 2010-01-18
  • 打赏
  • 举报
回复
各位高手说的触发器什么的,给我的帮助很大,我学习了。

ID这个字段一定要加的,而且顺序不能乱,因为涉及到其他方面的问题。我一时也说不清楚。

一两条SQL语句估计是解决不了了。害大家白忙呼一场。多谢大家了。

我的解决方法是:把删除的功能去掉了。呵呵,有问题以后再说了。结帖撒~~~
ouc_ajax 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 alaigo 的回复:]
引用 17 楼 ouc_ajax 的回复:
"insert into ezReport select max(ID)+1,'"+ cellName +"','" + buffer +"' +" from ezReport"

不要加上valus


这个不行,因为cellName 和buffer 不在表ezReport中啊!!
[/Quote]

cellName 和buffer 不在表ezReport中
没有任何问题啊
构造成了 select '1' from tableName 这种形式
没有问题的!
楼主试试吧。

insert into ezReport (ID,name,Buffer) values((select Math(max(ID)+1) from ezReport),'"+ cellName +"','" + buffer +"')

其实就是这种语句:
insert into tableName select max(id)+1,'name','buffer' from ezReport

不会有问题的!我一直这么用
Stephen_Kang 2010-01-16
  • 打赏
  • 举报
回复
忘了补充一点,如果用select max(id) from表。这样 删除其中(比如有三条数据,删除第二条)也不是连续的。

如果你是用在.NET中的。建议前面的序号不用id ,而是通过循环用一种累加递增的数据。
zhouwei7682719 2010-01-16
  • 打赏
  • 举报
回复
你想太多了,去掉那列的自动增长列,把ID改下, 然后再把标识列加上去 就可以了!~ 自动增长不需要你自己写的。。。
bo_301 2010-01-16
  • 打赏
  • 举报
回复
"insert into ezReport (ID,name,Buffer) values((select count(*)+1 from ezReport),"+ cellName +"','" + buffer +"')

自增字段应该是int型吧,不用加单引号的,这句SQL应该符合你的要求
Stephen_Kang 2010-01-15
  • 打赏
  • 举报
回复
呵呵

首先,sql应该有问题,在SQL2005中好像不是别双引号""

其次,在values中好像也不能出现子查询,只允许使用标量表达式。

最后,如果你的数据表中练一条数据都没有,你用select max(id) from 表 获取的应该是空值,而且,以后每添加的数据id值都应该是空的。

建议编写成存储过程,这样也可以提高性能:
下面是我模拟的东西。我试过了,没问题的

大家可以测试下:

create proc aaa
@name varchar(50)
as
declare @id int
select @id=max(id)+1 from a
insert into a (id,name) values(@id,@name)
go

exec aaa 'sad'



jidianxueyuan 2010-01-15
  • 打赏
  • 举报
回复
删除后重新排列
ilzd 2010-01-15
  • 打赏
  • 举报
回复
我原来也碰到类似的问题,后来我针对这张表(比如table1)建了一个备份表(table1_bak)。每次增加和修改记录的时候是同时往这两张表里增加,但是删除只是对table1进行操作,查找只是对table1_bak进行操作。
其实,一般来说,ID这个字段是不是连续的关系并不是特别大,就是有点不好看。
lsd123 2010-01-15
  • 打赏
  • 举报
回复
.
yan267 2010-01-15
  • 打赏
  • 举报
回复





Create FUNCTION [dbo].[getMaxID]
(

)
RETURNS
bigint
AS
BEGIN

declare @ID bigint
set @ID=0

SELECT TOP 1 @ID=Max(ID)+1 FROM ezReport

RETURN @ID
END

insert into ezReport (ID,[name],Buffer) select [dbo].[getMaxID],'"+ cellName +"','" + buffer +"'
chen_ya_ping 2010-01-15
  • 打赏
  • 举报
回复
我想说的是,既然一句话写出来的东西有错误,你可以分开来写成几句话,不要老想着一句就搞定。
alaigo 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 alwaysyan 的回复:]
要不这样试试:
insert into ezReport (ID,name,Buffer) values((select Math(max(ID)+1) from ezReport),'"+ cellName +"','" + buffer +"')
[/Quote]

试了。不好使
alaigo 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ouc_ajax 的回复:]
"insert into ezReport select max(ID)+1,'"+ cellName +"','" + buffer +"' +" from ezReport"

不要加上valus
[/Quote]

这个不行,因为cellName 和buffer 不在表ezReport中啊!!
alaigo 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ouc_ajax 的回复:]
"insert into ezReport select max(ID)+1,'"+ cellName +"','" + buffer +"' +" from ezReport"

不要加上valus
[/Quote]

这个不行,因为cellName 和buffer 不在表ezReport中啊!!
alwaysyan 2010-01-15
  • 打赏
  • 举报
回复
要不这样试试:
insert into ezReport (ID,name,Buffer) values((select Math(max(ID)+1) from ezReport),'"+ cellName +"','" + buffer +"')
ouc_ajax 2010-01-15
  • 打赏
  • 举报
回复
用insert into Table select * from table2
这种语法是可以使用max的,不然是不允许valus里边子查询的
加载更多回复(17)

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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