Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用using MAX()方法重新启动表的初始id_Database_Db2 - Fatal编程技术网

Database 使用using MAX()方法重新启动表的初始id

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语

我正在我的桌子上做一些改变,但我无法找出问题所在。 这是我的SQL脚本

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。这看起来会是什么样子?我有问题,所以可能值得一提的是,为了使其工作,您的语句终止符不能是
我改成了
@
,它成功了。谢谢分享。