Το μήνυμα λάθους προκύπτει 1785, όταν δημιουργείτε έναν περιορισμό FOREIGN KEY που μπορεί να προκαλέσει πολλές διαδρομές σε επικάλυψη

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 321843 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν δημιουργείτε έναν περιορισμό FOREIGN KEY ενδέχεται να λάβετε το ακόλουθο μήνυμα λάθους:
Διακομιστής: Μήνυμα λάθους 1785, 16 επιπέδου, κατάσταση 1, γραμμή 1 Εισαγωγή στις FOREIGN KEY περιορισμού 'fk_two' στον πίνακα 'πίνακας2' μπορεί να προκαλέσει κύκλους ή πολλές διαδρομές σε επικάλυψη. Καθορίστε ON DELETE δεν ΕΝΕΡΓΕΙΑ ή ON UPDATE ΟΧΙ ΕΝΕΡΓΕΙΑ ή τροποποίηση άλλων περιορισμών FOREIGN KEY. Διακομιστής: Μήνυμα λάθους 1750, 16 επιπέδου, κατάσταση 1, γραμμή 1 πιθανόν δεν δημιουργήσει περιορισμού. Δείτε προηγούμενα σφάλματα.

Αιτία

Λαμβάνετε αυτό το μήνυμα λάθους επειδή στον SQL Server, ένας πίνακας δεν μπορεί να εμφανίζεται περισσότερες από μία φορές σε μια λίστα με όλες τις διαδοχικές αναφορών ενέργειες που ξεκινούν από ένα DELETE ή μια πρόταση UPDATE. Για παράδειγμα, το δέντρο των επικαλυπτόμενων αναφορών ενέργειες μόνο πρέπει να έχει μία διαδρομή σε ένα συγκεκριμένο πίνακα στη δομή διαδοχικές ενέργειες αναφορών.

Εναλλακτικός τρόπος αντιμετώπισης

Για να επιλύσετε αυτό το ζήτημα, μην δημιουργείτε ένα ξένο κλειδί που θα δημιουργήσει περισσότερες από μία διαδρομή σε έναν πίνακα σε μια λίστα με τις διαδοχικές ενέργειες αναφορών.

Μπορείτε να επιβάλετε ακεραιότητα αναφορών, με πολλούς τρόπους. Η δηλωτική ακεραιότητα αναφορών (DRI) είναι η πιο βασική τρόπο, αλλά επίσης είναι η λιγότερο ευέλικτη τρόπο. Εάν χρειάζεστε περισσότερη ευελιξία, αλλά εξακολουθείτε να θέλετε ένα υψηλό βαθμό ακεραιότητας, μπορείτε να χρησιμοποιήσετε τα εναύσματα.

Περισσότερες πληροφορίες

Το ακόλουθο δείγμα κώδικα είναι ένα παράδειγμα μιας προσπάθειας δημιουργίας FOREIGN KEY που δημιουργεί το μήνυμα λάθους:

Use tempdb
go
create table table1 (user_ID integer not null primary key, user_name
char(50) not null)
go

create table table2 (author_ID integer not null primary key, author_name
char(50) not null, lastModifiedBy integer not null, addedby integer not
null)

go

alter table table2 add constraint fk_one foreign key (lastModifiedby)
references table1 (user_ID) on delete cascade on update cascade
go
alter table table2 add constraint fk_two foreign key (addedby)
references table1(user_ID) on delete no action on update cascade
go
--this fails with the error because it provides a second cascading path to table2.

alter table table2 add constraint fk_two foreign key (addedby)
references table1 (user_ID) on delete no action on update no action
go
-- this works.
				

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα "Επικαλυπτόμενων αναφορών περιορισμούς ακεραιότητας" στο SQL Server 2000 Books Online.

Ιδιότητες

Αναγν. άρθρου: 321843 - Τελευταία αναθεώρηση: Τρίτη, 21 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Λέξεις-κλειδιά: 
kbbug kbpending kbprb kbprogramming kbmt KB321843 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:321843

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com