Sql 在DB2中将主键序列(';Default';更改为';始终';)
我在DB2中创建了下表。由于序列是默认生成的,所以主键可以插入表中(因为主键是在使用alter创建表之后添加的),并且有可能出现重复值。解决方案是使用ALWAYS生成的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 (
创建序列。现在表中有了数据,我想将其从默认生成的更改为始终生成的
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)仅将列标记为主列是不够的。您还必须单独为其创建索引。我接触主机已经有一年了,我正在逐渐将其从我的湿设备中删除,但它似乎仍存储在某处:-)没有足够的确定性使其成为一个答案,但它可能会有所帮助。您认为是否要为主键创建索引。:)