【发布时间】:2011-06-12 14:08:40
【问题描述】:
所以我整个下午都在网上寻找答案。我有一个看起来像这样的表:
CREATE TABLE ldap_domains (
domain varchar(128) NOT NULL,
name varchar(16) NOT NULL,
description varchar(32) NOT NULL
)
ALTER TABLE ldap_domains
ADD CONSTRAINT pk_domain PRIMARY KEY (domain);
INSERT INTO ldap_domains VALUES ('test', 'test', 'test');
INSERT INTO ldap_domains VALUES ('test1', 'test', 'test');
INSERT INTO ldap_domains VALUES ('test2', 'test', 'test');
INSERT INTO ldap_domains VALUES ('test3', 'test', 'test');
我需要修改这个表,使一个新列成为主键。作为其中的一部分,我需要在应用约束之前使用唯一值更新新列。看起来像这样:
ALTER TABLE ldap_domains
DROP CONSTRAINT pk_domain;
ALTER TABLE ldap_domains
ADD id int;
DECLARE @key int
SET @key = 0
UPDATE ldap_domains SET @key = id = @key + 1;
ALTER TABLE ldap_domains
ALTER COLUMN id int NOT NULL;
ALTER TABLE ldap_domains
ADD CONSTRAINT pk_id PRIMARY KEY (id);
这在 SQLServer 上可以正常工作,但是,我也需要它来为 Oracle 工作。本质上,Oracle 不喜欢的部分是:
DECLARE @key int
SET @key = 0
UPDATE ldap_domains SET @key = id = @key + 1;
谁能赐教?
【问题讨论】:
标签: sql sql-server oracle plsql