2010-08-16 14 views
15

Microsoft SQL Server 2005 kullanıyorum ve genel olarak SQL için nispeten yeni.SQL Server Hatası: "%" bir kısıtlama değildir. Kısıtlama yapılamadı. Önceki hatalara bakın

"Bilgi" veritabanındaki iki tablo, "Kaynaklar" ve "Group_Resources" arasında bir ilişki var. Kaynakların Group_Resources içinde "resource_id" adlı yabancı bir anahtarı "id" vardır. İki arasında, "fk_gr_res_resources" gibi bir yabancı anahtar kısıtlaması var.

Veritabanı sahibi olarak kurulmuş ve tam okuma/yazma/oluşturma/silme izinlerine sahibim.

Ben yabancı anahtar kısıtlamasını silmek istiyorum, bu yüzden aşağıdaki sorguyu yürütür:

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

ve şu hatayı aldım:

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

bir sınırlamadır çünkü kafam karıştı ve yazım hatası yok. Bunu yanlış bir şekilde silmek için mi gidiyorum? Kısıtlamayı yanlış tablodan silmiyorum mu? Herhangi bir öneri çok takdir edilecektir, & lütfen beni alevleme: Ben her şeyden önce SQL için yeniyim.

+2

Diğer tablodaki kısıtlamayı silmeyi denediniz mi? Bu, doğru yerden silip silmediğiniz sorusuna cevap verir. – SqlRyan

+0

Evet - Kısıtlamayı hem "gropus_resources" hem de "resources" kaynaklarından silmeyi denedim. Ben hala aynı hatayı alıyorum. Önerin için teşekkürler. – amanda

cevap

21

Bu hatayı alıyorsanız:

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. 

Çünkü FK kısıtlama yok!

EğerInformationdoğru şema adı değildbo olduğundan emin misin?

1. Bu SQL FK var olmadığını kanıtlayacaktır:

SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources' 

2. Üzgünüz, benim orijinal cevap yanlış olduğunu, burada SQL Server için doğru sözdizimi şöyledir:

veritabanı için
ALTER TABLE <table_name> 
DROP CONSTRAINT <foreignkey_name> 

3. Örnek:

Bu çalışan

4. Dene: Hala o hatayı alırsanız

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. Sonra bu deneyin ve görün: diğer sözdizimi MySQL içindi

ALTER TABLE Group_Resources 
DROP CONSTRAINT fk_gr_res_resources 

, üzgünüm:

Düzeltme için teşekkürler OMG Ponies!

+0

Kod örneği için teşekkürler. Aşağıdaki koymak: "TABLO ALTER DAMLA YABANCI KEY " ve bu hatayı verdi: " 'YABANCI' anahtar kelime yakınında yanlış sözdizimi." İkinci örnekle aynı anlaşma. (Bu arada, her şey düzgün bir şekilde yazıldığından, neden hata yapmaya devam ettiğimden emin değilim: sözdizimi doğru görünüyor.) – amanda

+0

@OMG Ponies: Hatamı işaret ettiğin için teşekkürler, oylama yapmak için de teşekkürler! – JohnB

+0

Bu cevap benim sorunumu çözdü :) @JohnB & @OMG Ponies: Önerileriniz için çok teşekkür ederim! – amanda