2009-06-24 18 views
0

J'ai deux tables:Supprimer les clés étrangères dans sybase 12,5

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) 
) 

Je suis en train de laisser tomber le constrait fk afin que je puisse ensuite déposer la table.

Le FK existe definitley:

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

(nom DB obscurci)

Mais les deux

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

retour

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

Quelqu'un sait-il comment supprimer ces clés ?

Nous vous remercions à l'avance

Ryan

Répondre

2
ALTER TABLE dbo.city DELETE FOREIGN KEY [enternameoftheforeignkeyhere] 

Sinon, je ne sais pas ce qui pourrait être la raison. Le numéro du message d'erreur signifie qu'il n'a pas pu le supprimer de syskeys. Mais il a trouvé les deux tables et vous êtes le propriétaire des tables aussi.


Avez-vous essayé sp_helpkey et sp_helpconstraint pour vérifier ce qu'ils disent de l'existence d'un FK?

Cela devrait également être en mesure de vous dire s'il y a vraiment un FK défini.

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

Concernant la dénomination d'un FK. Cela devrait faire l'affaire

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

Merci pour votre réponse. Mes clés foriegn n'ont pas de noms (du moins pas ceux que j'ai définis explicitement), par exemple FOREIGN KEY (cntry_id) REFERENCES dbo.country (cntry_id) ne nomme pas réellement la clé. J'ai essayé fk_mykey FOREIGN KEY (cntry_id) RÉFÉRENCES dbo.country (cntry_id) mais thatgives une erreur de syntaxe. Savez-vous comment je "nomme" le FK? Merci – Ryan

+0

Réponse étendue – jitter

+2

Brillant. Je vous remercie. La syntaxe réelle était ALTER TABLE dbo.cty DROP CONSTRAINT fk_cty_cntry Mais vous me mettez dans la bonne direction :) – Ryan

1

Je n'ai pas 12,5 DB de moi Infront au moment, mais je sais avec Sybase Anywhere et Sybase IQ, vous pouvez gérer les clés étrangères avec Sybase Central. Si vous avez installé Sybase Central, lancez-le, sélectionnez votre table puis, sur le côté droit, recherchez un onglet appelé Contraintes ou Clés étrangères. Si vous l'avez, sélectionnez le FK que vous voulez supprimer, appuyez sur supprimer, puis faites un clic droit sur le tableau sur le côté gauche et sélectionnez ENREGISTRER TABLE.

J'espère que cela aide!