Sybase Advantage数据库
我正在进行查询
INSERT INTO nametable
SELECT * FROM nametable WHERE [indexkey]=32;
UPDATE nametable Set FieldName=1
WHERE [IndexKey]=(SELECT max([indexKey]) FROM nametable);
目的是将给定记录复制到新记录中,然后使用一些新值更新新创建的记录。 “indexKey”声明为autoinc,是表的主键。
我不确定这是否可以在速度更快的单一声明中实现,或者;;;建议表示赞赏。
答案 0 :(得分:3)
可以使用单个语句实现,但它会使代码更容易受到架构更改的影响。假设除了FieldName和indexKey列之外,表中还有2列。然后,以下声明将实现您的目标。
INSERT INTO nametable ( FieldName, Column2, Column3 )
SELECT 1, Column2, Column3 FROM nametable WHERE [indexkey]=32
但是,如果表结构发生更改,则需要相应地更新此语句。
BTW,您的原始实现在多用户场景中并不安全。 UPDATE语句中的max([indexKey])可能不是INSERT语句生成的。另一个用户可能在两个语句之间插入了另一行。要使用原始方法,应使用LastAutoInc()标量。UPDATE nametable Set FieldName=1
WHERE [IndexKey] = LastAutoInc( STATEMENT )