Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Sql 在DB2中将主键序列(';Default';更改为';始终';)_Sql_Database_Db2 - Fatal编程技术网

Sql 在DB2中将主键序列(';Default';更改为';始终';)

Sql 在DB2中将主键序列(';Default';更改为';始终';),sql,database,db2,Sql,Database,Db2,我在DB2中创建了下表。由于序列是默认生成的,所以主键可以插入表中(因为主键是在使用alter创建表之后添加的),并且有可能出现重复值。解决方案是使用ALWAYS生成的创建序列。现在表中有了数据,我想将其从默认生成的更改为始终生成的 CREATE TABLE HW_COB.ILCCDS ( CDS_IDENTITY FOR COLUMN CDSID NUMERIC(13, 0) GENERATED BY DEFAULT AS IDENTITY (

我在DB2中创建了下表。由于序列是默认生成的,所以主键可以插入表中(因为主键是在使用alter创建表之后添加的),并且有可能出现重复值。解决方案是使用ALWAYS生成的
创建序列。现在表中有了数据,我想将其从默认生成的
更改为始终生成的

  CREATE TABLE HW_COB.ILCCDS 
  ( 
                   CDS_IDENTITY FOR COLUMN CDSID NUMERIC(13, 0) GENERATED BY DEFAULT AS IDENTITY ( 
                   START WITH 1 INCREMENT BY 1 
                   NO MINVALUE NO MAXVALUE 
                   NO CYCLE NO ORDER 
                   CACHE 20 ) ,

CODE_1 FOR COLUMN CDSCD1 CHAR(30),
CODE_2 FOR COLUMN CDSCD2 CHAR(30) );
ALTER TABLE HW_COB.ILCCDS ADD CONSTRAINT HW_COB.PK_CDS_IDENTITY PRIMARY KEY (CDS_IDENTITY);
最终得到的改变是:


ALTER TABLE HW_COB.ILCCDS ALTER COLUMN CDS_IDENTITY SET始终生成

主键可以插入重复值
-不,我认为不能。如果用户指定了值,它可能会尝试这样做,但它会失败。然后它不是主键,而是一个简单的标识列,没有
unique
子句-我可能应该更仔细地查看定义,而不是文本:-),您必须从内存中删除标识列,然后创建另一个同名的标识列(当然总是生成),起始值为前面的max加1。至少对于DB2/z是这样,我怀疑DB2/LUW可能类似。尽管我怀疑您使用的是基于大写和非描述性名称的前者。@paxdiablo我已经编辑了我的插入脚本,因为我为列CDS_identity创建了主键(至少对于DB2/z)仅将列标记为主列是不够的。您还必须单独为其创建索引。我接触主机已经有一年了,我正在逐渐将其从我的湿设备中删除,但它似乎仍存储在某处:-)没有足够的确定性使其成为一个答案,但它可能会有所帮助。您认为是否要为主键创建索引。:)