2010-08-16 3 views
15

Ich verwende Microsoft SQL Server 2005 und bin relativ neu in SQL im Allgemeinen.SQL Server-Fehler: "%" ist keine Einschränkung. Constraint konnte nicht gelöscht werden. Siehe vorherige Fehler

Es gibt eine Beziehung zwischen zwei Tabellen, "Ressourcen" und "Group_Resources", in der Datenbank "Information". Ressourcen haben einen Fremdschlüssel "id" in Group_Resources mit dem Namen "resource_id". Es gibt eine Fremdschlüsseleinschränkung "fk_gr_res_resources" zwischen den beiden.

Ich bin als der Besitzer der Datenbank eingerichtet, und habe vollständige Berechtigungen zum Lesen/Schreiben/Erstellen/Löschen.

Ich möchte den Fremdschlüssel löschen, so ausgeführt ich die folgende Abfrage:

ALTER TABLE [Information].[group_resources] DROP CONSTRAINT fk_gr_res_resources 

und erhielt den folgenden Fehler:

'fk_gr_res_resources' is not a constraint. Could not drop constraint. See previous errors.

Ich bin verwirrt, weil es sich um eine Einschränkung ist, und es gibt keine Rechtschreibfehler. Werde ich das unpassend löschen? Lösche ich die Einschränkung aus der falschen Tabelle? Irgendwelche Vorschläge würden sehr geschätzt, & bitte flame mich nicht: Ich bin schließlich zu SQL neu.

+2

Haben Sie versucht, die Einschränkung aus der anderen Tabelle zu löschen? Das würde deine Frage beantworten, ob du es an der richtigen Stelle löschst. – SqlRyan

+0

Ja- Ich habe versucht, die Einschränkung von "gropus_resources" und "Ressourcen" zu löschen. Ich bekomme immer noch den gleichen Fehler. Danke für den Vorschlag. – amanda

Antwort

21

Sie erhalten diese Fehlermeldung:

Msg 3728, Level 16, State 1, Line 1 
'fk_gr_res_resources' is not a constraint. 
Msg 3727, Level 16, State 0, Line 1 
Could not drop constraint. See previous errors. 

Da die FK-Einschränkung existiert nicht!

Sind Sie sicher, dassInformationdie richtige Schemaname und nichtdbo?

1. Diese SQL beweisen, dass die FK nicht existiert:

SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources' 

2. Oops, ich war falsch in meiner ursprünglichen Antwort, hier ist die korrekte Syntax für SQL Server:

ALTER TABLE <table_name> 
DROP CONSTRAINT <foreignkey_name> 

3. Beispiel für Ihre Datenbank:

IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources') 
BEGIN 
    ALTER TABLE Group_Resources 
    DROP CONSTRAINT fk_gr_res_resources 
END; 

4. Versuchen Sie dies ausgeführt wird:

IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources') 
BEGIN 
    ALTER TABLE Group_Resources 
    ADD CONSTRAINT fk_gr_res_resources 
    FOREIGN KEY (resource_id) 
    REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */ 
END; 

5. Dann ist dieses versuchen und sehen, ob Sie immer noch, dass Fehler:

ALTER TABLE Group_Resources 
DROP CONSTRAINT fk_gr_res_resources 

Die andere Syntax für MySQL war, Entschuldigung:

ALTER TABLE <table_name> 
DROP FOREIGN KEY <foreignkey_name> 

Danke für die Korrektur mich OMG Ponys!

+0

Danke für das Codebeispiel. Ich habe in der folgenden: " DROP FOREIGN KEY ALTER TABLE " und es gab diesen Fehler: "Falsche Syntax nahe dem Schlüsselwort 'fremd'." Gleicher Deal mit dem 2. Beispiel. (übrigens ist alles richtig geschrieben, also bin ich mir nicht sicher, warum ich immer Fehler bekomme: Die Syntax sieht korrekt aus.) – amanda

+0

@OMG Ponies: Danke, dass du auf meinen Fehler hingewiesen hast, und auch nicht runter! – JohnB

+0

Diese Antwort löste mein Problem :) @JohnB & @OMG Ponys: Vielen Dank für Ihre Anregungen !! – amanda

Verwandte Themen