删除sybase 12.5中的外键

时间:2009-06-24 18:56:49

标签: sql schema foreign-keys sybase

我有两张桌子:

CREATE TABLE dbo.country
(
cntry_id  VARCHAR(2)    NOT NULL,
name      VARCHAR(50)   NOT NULL,

CONSTRAINT pk_country PRIMARY KEY (cntry_id)

CREATE TABLE dbo.city
(
city_id   VARCHAR(3)    NOT NULL,
name      VARCHAR(50)   NOT NULL,
cntry_id  VARCHAR(2)    NOT NULL,

CONSTRAINT pk_city PRIMARY KEY (city_id),
FOREIGN KEY (cntry_id) REFERENCES dbo.country(cntry_id)
) 

我正试图放弃fk constrait,这样我就可以放下桌子了。

FK definitley存在:

EXEC sp_fkeys country 
pktable_qualifier   pktable_owner   pk_tablename ... 
xxxxxx          xxx             country cntry_id ....

(数据库名称模糊)

但两者

EXEC sp_dropkey foreign, country, city
EXEC sp_dropkey foreign, city, country

返回

264 Error (17499) No foreign key for the table or view exists. sp_dropkey(263)

有人知道如何放下这些钥匙吗?

提前谢谢

赖安

3 个答案:

答案 0 :(得分:2)

ALTER TABLE dbo.city DELETE FOREIGN KEY [enternameoftheforeignkeyhere]

否则我不知道可能是什么原因。错误消息的编号意味着他无法从syskeys中删除它。但他发现这两张桌子都没问题,你也是桌子的主人。


您是否尝试sp_helpkeysp_helpconstraint检查他们对FK存在的看法?

这也应该能够告诉你是否真的定义了FK。

select * from syskeys where depid = object_id([parenttablename]) and type = 2

关于FK的命名。这应该可以解决问题

CREATE TABLE
....
CONSTRAINT fk_mykey FOREIGN KEY (cntry_id) REFERENCES dbo.country(cntry_id)
...

答案 1 :(得分:1)

目前我没有12.5 DB的数据,但我知道Sybase Anywhere和Sybase IQ可以使用Sybase Central管理外键。如果安装了Sybase Central,请将其激活选择您的表,然后在右侧查找名为Constraints或Foreign Keys的选项卡。如果您选择要删除的FK,请按删除,然后右键单击左侧的表并选择保存表。

我希望有所帮助!

答案 2 :(得分:0)

给constraint赋值很重要,不然会陷入这种麻烦的境地,然后:

您的外键创建语句应该是:

Alter table city 
  add constraint city_country_fk foreign key(cntry_id)
     references country(cntry_id);

然后,你可以简单地这样做:

alter table dbo.city 
  drop constraint city_country_fk ;

干杯:)