Database 使用using MAX()方法重新启动表的初始id
我正在我的桌子上做一些改变,但我无法找出问题所在。 这是我的SQL脚本Database 使用using MAX()方法重新启动表的初始id,database,db2,Database,Db2,我正在我的桌子上做一些改变,但我无法找出问题所在。 这是我的SQL脚本 ALTER TABLE X ALTER COLUMN X_ID RESTART WITH (SELECT MAX(X_ID) FROM X); 虽然我使用了AS而不是WITH并尝试了其他组合,但我找不到确切的语法。(顺便说一句,我无法在初始化中设置此属性,我必须在创建表后设置)查看语法时,您会发现您只能使用常量,例如“使用12345重新启动”。查询本身是不可能的。要实现自动化,您需要将其分解,使用一个变量,生成ALTER语
ALTER TABLE X ALTER COLUMN X_ID RESTART WITH (SELECT MAX(X_ID) FROM X);
虽然我使用了
AS
而不是WITH
并尝试了其他组合,但我找不到确切的语法。(顺便说一句,我无法在初始化中设置此属性,我必须在创建表后设置)查看语法时,您会发现您只能使用常量,例如“使用12345重新启动”。查询本身是不可能的。要实现自动化,您需要将其分解,使用一个变量,生成ALTER语句并执行它。假设这是针对DB2 For LUW的,您可以使用一些动态SQL自动化重置标识值的过程:
begin
declare curmax bigint;
for r as select tabschema, tabname, colname, nextcachefirstvalue, seqid
from syscat.colidentattributes where tabschema = current_schema
do
prepare s from
'select max(' || r.colname || ') from ' ||
rtrim(r.tabschema) || '.' || r.tabname;
begin
declare c cursor for s;
open c;
fetch c into curmax;
close c;
end;
if curmax >= r.nextcachefirstvalue
then
execute immediate
'alter table ' || rtrim(r.tabschema) || '.' || r.tabname ||
' alter column ' || r.colname || ' restart with ' || varchar(curmax+1);
end if;
end for;
end
如果您的标识不是整数,您可能需要更改
curmax
的数据类型,并调整对syscat.colidentattributes
的查询,以使用适当的架构名称。MySql或SQL Server?我正在处理DB2,在传输数据后,我将表划分为两个不同的表,我必须将ID从新表的1重新启动到最大ID,以防止冲突@Strawberry@KemalToprakUçar然后将其标记为,而不是MySQL和SQL Server。这看起来会是什么样子?我有问题,所以可能值得一提的是,为了使其工作,您的语句终止符不能是代码>我改成了@
,它成功了。谢谢分享。