sql查询某个表中某个字段的最大值,再当新记录的字段值插入当前表的语句咋写啊?

时间:2021-10-09 12:50:01
sql查询某个表中某个字段的最大值,再当新记录的字段值插入当前表的语句咋写啊?
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge,jrlnum)' +
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) + ',' +
    QuotedStr( 卡住的地方) + ')';
ADOQuery1.ExecSQL;
jrlnum是个值增加1的字段,我想查出当前的最大值,再将值插入进去,怎么写啊?

7 个解决方案

#1



var
  vNum : integer;

ADOQuery1.Close; 
adoQuery1.sql.text := 'select IsNull(Max(jrlNum),0) from manager.charge_log_ecard';
AdoQuery1.open;
vNum := AdoQuery1.fields[0].AsInteger;
inc(vNum);

ADOQuery1.Close; 
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge,jrlnum)' + 
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) + ',' + 
   InttoStr(vNum) + ')'; 
ADOQuery1.ExecSQL; 

#2


步骤
1.插入前先得到表的最大值
2.新的值(要插入的)=步骤1的值+1;
3.插入

引用1楼的

ADOQuery1.Close; 
adoQuery1.sql.text := 'select IsNull(Max(jrlNum),0) from manager.charge_log_ecard';
AdoQuery1.open;
vNum := AdoQuery1.fields[0].AsInteger;//取到已有的最大值
inc(vNum);加一,得到要插入的最大值

#3


如果jrlnum是自增长字段,可以不用处理。
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge)' +
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) +')';
ADOQuery1.ExecSQL; 

#4


如果是oracle数据库可以用sequence来实现
select seq.nextval from dual呵,楼上几位说的都很详细

#5


1,如果jrlnum是自增长字段,可以不用处理。 
2,如果不是可以在SQL Server中创建一个函数获取jrlnum最大值。
    例如创建一个函数GetMax()获取charge_log_ecard表中jrlnum字段最大值。

CREATE FUNCTION [dbo].[GetMax]() 
RETURNS int
AS
BEGIN
declare @max int
select @max=max(jrlnum) + 1 from charge_log_ecard
return @max
END

然后

ADOQuery1.Close; 
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge,jrlnum)' + 
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) + ',' + 
    GetMax() + ')'; 
ADOQuery1.ExecSQL; 

#6


如果没有多人同时操作此表,无所谓
否则
感觉最好还是把字段整成自增的,要不然同时操作就不保险了。。。

#7


以上的答案都挺好的。学习了。谢谢。结贴

#1



var
  vNum : integer;

ADOQuery1.Close; 
adoQuery1.sql.text := 'select IsNull(Max(jrlNum),0) from manager.charge_log_ecard';
AdoQuery1.open;
vNum := AdoQuery1.fields[0].AsInteger;
inc(vNum);

ADOQuery1.Close; 
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge,jrlnum)' + 
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) + ',' + 
   InttoStr(vNum) + ')'; 
ADOQuery1.ExecSQL; 

#2


步骤
1.插入前先得到表的最大值
2.新的值(要插入的)=步骤1的值+1;
3.插入

引用1楼的

ADOQuery1.Close; 
adoQuery1.sql.text := 'select IsNull(Max(jrlNum),0) from manager.charge_log_ecard';
AdoQuery1.open;
vNum := AdoQuery1.fields[0].AsInteger;//取到已有的最大值
inc(vNum);加一,得到要插入的最大值

#3


如果jrlnum是自增长字段,可以不用处理。
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge)' +
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) +')';
ADOQuery1.ExecSQL; 

#4


如果是oracle数据库可以用sequence来实现
select seq.nextval from dual呵,楼上几位说的都很详细

#5


1,如果jrlnum是自增长字段,可以不用处理。 
2,如果不是可以在SQL Server中创建一个函数获取jrlnum最大值。
    例如创建一个函数GetMax()获取charge_log_ecard表中jrlnum字段最大值。

CREATE FUNCTION [dbo].[GetMax]() 
RETURNS int
AS
BEGIN
declare @max int
select @max=max(jrlnum) + 1 from charge_log_ecard
return @max
END

然后

ADOQuery1.Close; 
ADOQuery1.SQL.Text := 'insert into manager.charge_log_ecard(reader_barcode,charge,jrlnum)' + 
    ' values(' + QuotedStr(Trim(Rzedit18.text)) + ',' + Trim(RzEdit19.Text) + ',' + 
    GetMax() + ')'; 
ADOQuery1.ExecSQL; 

#6


如果没有多人同时操作此表,无所谓
否则
感觉最好还是把字段整成自增的,要不然同时操作就不保险了。。。

#7


以上的答案都挺好的。学习了。谢谢。结贴