Το ένθετο ταυτότητας είναι απενεργοποιημένο

Όπως φαίνεται από τον τίτλο του υλικού, σήμερα θα μιλήσω για αυτήν, σε ορισμένες περιπτώσεις, χρήσιμη ιδιότητα του πίνακα στο Microsoft SQLΔιακομιστής ως IDENTITY_INSERT, χρησιμοποιώντας τη συγκεκριμένη ιδιότητα, μπορείτε να εισαγάγετε στο πεδίο αυτόματης αύξησης μια τιμή που είχε προηγουμένως διαγραφεί, π.χ. Συμπληρώστε ή επαναφέρετε τις τιμές αναγνωριστικού που λείπουν.

Πιθανώς, πολλοί προγραμματιστές διακομιστών SQL έχουν αντιμετωπίσει μια κατάσταση όταν, για κάποιο λόγο, ορισμένες εγγραφές διαγράφονται σε έναν πίνακα στον οποίο ορίζεται μια προδιαγραφή αναγνωριστικού και, στη συνέχεια, υπάρχει ανάγκη επαναφοράς αυτών των εγγραφών, με τις τιμές του παλιού αναγνωριστικά. Το πρώτο πράγμα που έρχεται στο μυαλό είναι, φυσικά, να διαγράψετε την αναγνώριση, να εισαγάγετε σειρές με τις απαραίτητες τιμές και στη συνέχεια να επαναφέρετε την αναγνώριση, αλλά για αυτό, όπως καταλαβαίνετε, είναι απαραίτητο να εκτελέσετε πολλούς χειρισμούς που μπορούν επηρεάζουν την πρόοδο της τρέχουσας εργασίας, επομένως αυτό πρέπει να γίνει γρήγορα και είναι καλύτερα σε μια εποχή που δεν υπάρχουν χρήστες που να εργάζονται στη βάση δεδομένων.

Αλλά στην πραγματικότητα, υπάρχει ένας απλούστερος και πιο σημαντικός σωστός τρόπος που σας επιτρέπει να εισάγετε τιμές σε μια στήλη αναγνωριστικού πίνακα, είναι να χρησιμοποιήσετε την ιδιότητα ΕΝΘΕΤΟ ΤΑΥΤΟΤΗΤΑΣ.

Ιδιότητα IDENTITY_INSERT στον MS SQL Server

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

Όταν εργάζεστε με αυτήν την ιδιότητα, είναι απαραίτητο να λάβετε υπόψη ορισμένες αποχρώσεις, ας τις δούμε:

  • Η ιδιότητα IDENTITY_INSERT μπορεί να είναι ενεργοποιημένη μόνο για έναν πίνακα σε μια περίοδο λειτουργίας, π.χ. Το IDENTITY_INSERT δεν μπορεί να οριστεί σε ON για δύο ή περισσότερα τραπέζια σε μια περίοδο λειτουργίας ταυτόχρονα. Εάν πρέπει να χρησιμοποιήσετε το IDENTITY_INSERT ON για πολλούς πίνακες σε μία πρόταση SQL, πρέπει πρώτα να ορίσετε την τιμή σε OFF για τον πίνακα που έχει ήδη υποβληθεί σε επεξεργασία και, στη συνέχεια, να ορίσετε το IDENTITY_INSERT σε ON για τον επόμενο πίνακα.
  • Εάν η τιμή αναγνωριστικού που έχει εισαχθεί είναι μεγαλύτερη από την τρέχουσα τιμή, τότε ο διακομιστής SQL θα χρησιμοποιήσει αυτόματα την τιμή που έχει εισαχθεί ως τρέχουσα, δηλ. εάν, για παράδειγμα, η επόμενη τιμή αναγνωριστικού είναι 5 και, χρησιμοποιώντας το IDENTITY INSERT, εισαγάγετε ένα αναγνωριστικό με τιμή 6, τότε η επόμενη τιμή αναγνωριστικού θα γίνει αυτόματα 7.
  • Για να χρησιμοποιήσει το IDENTITY_INSERT, ο χρήστης πρέπει να έχει τα κατάλληλα δικαιώματα, δηλαδή να είναι ο κάτοχος του αντικειμένου ή να είναι μέλος του ρόλου διακομιστή sysadmin, ρόλου βάσης δεδομένων db_owner ή db_ddladmin.

Ας εξετάσουμε λοιπόν μια κατάσταση όπου πρέπει να εισαγάγουμε μια τιμή σε μια στήλη με ένα αναγνωριστικό, ας υποθέσουμε ότι η σειρά με αυτήν την τιμή διαγράφηκε και πρέπει να την επαναφέρουμε.

Αρχικά, ας δούμε τα δεδομένα πηγής.

Αρχικά στοιχεία

Σημείωση! Ως παράδειγμα, θα χρησιμοποιήσω το Microsoft SQL Server 2012 Express DBMS.

Δημιουργούμε έναν πίνακα που έχει μια στήλη με ένα αναγνωριστικό και τον συμπληρώνουμε με δεδομένα.

CREATE TABLE TestTable(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, TextData VARCHAR(50) NOT NULL); GO INSERT INTO TestTable(TextData) VALUES("Σειρά 1"); INSERT INTO TestTable(TextData) VALUES("Γραμμή 2"); INSERT INTO TestTable(TextData) VALUES("Γραμμή 3"); INSERT INTO TestTable(TextData) VALUES("Γραμμή 4"); INSERT INTO TestTable(TextData) VALUES("Γραμμή 5"); GO SELECT * FROM TestTable


Στη συνέχεια, ας διαγράψουμε τη σειρά όπου η τιμή αναγνωριστικού είναι 3.

DELETE TestTable WHERE TextData = "Σειρά 3"; ΠΗΓΑΙΝΩ

Επαναφορά σειρών πίνακα με ένα πεδίο αυτόματης αύξησης

Έχουμε μια σειρά που λείπει στον πίνακα με την τιμή ID = 3 και πρέπει να την επαναφέρουμε με ID = 3, για αυτό εμείς, ως αρχάριοι προγραμματιστές SQL, δοκιμάζουμε πρώτα αυτό

INSERT INTO TestTable (ID, TextData) VALUES (3, "Γραμμή 3"); ΠΗΓΑΙΝΩ


Όπως μπορείτε να δείτε, δεν μπορέσαμε να εισαγάγουμε μια τέτοια γραμμή.

Τώρα, ας χρησιμοποιήσουμε την ιδιότητα IDENTITY_INSERT, π.χ. Ας ορίσουμε την τιμή του για τον πίνακα TestTable σε ON.

SET IDENTITY_INSERT TestTable ON. INSERT INTO TestTable (ID, TextData) VALUES (3, "Γραμμή 3"); ΕΠΙΛΟΓΗ * ΑΠΟ TestTable GO


Αυτή τη φορά όλα πήγαν όπως αναμενόταν.

Σημείωση! Εάν η στήλη με ένα αναγνωριστικό είναι πρωτεύον κλειδί, όπως στο παράδειγμά μας, τότε εάν προσπαθήσετε να εισαγάγετε μια τιμή αναγνωριστικού που υπάρχει ήδη, θα ενεργοποιηθεί ο περιορισμός ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ, με άλλα λόγια, θα συνεχίσουν να ισχύουν μοναδικά κλειδιά.

Το σημείωμα! Συνιστώ στους αρχάριους προγραμματιστές να διαβάσουν το βιβλίο μου "The T-SQL Programmer's Way", στο οποίο περιγράφω λεπτομερώς, με μεγάλο ποσόΠαραδείγματα, μιλάω για άλλες χρήσιμες δυνατότητες της γλώσσας Transact-SQL.

Αυτό είναι όλο για μένα, ελπίζω ότι το υλικό σας ήταν χρήσιμο!



Το ID_insert έχει οριστεί σε απενεργοποιημένη (11)

Εάν χρησιμοποιείτε το Liquibase για ενημέρωση SQL Serverπιθανότατα θα προσπαθήσετε να εισαγάγετε το κλειδί εγγραφής στο πεδίο autoIncrement. Αφαιρώντας τη στήλη από το ένθετο, το σενάριό σας θα πρέπει να λειτουργεί.

...

Εκτελώ το ακόλουθο σενάριο στο παρακάτω σφάλμα. Ποιο είναι το σφάλμα και πώς μπορεί να λυθεί;

Διακομιστής: Msg 544, επίπεδο 16, κατάσταση 1, γραμμή 1

Δεν είναι δυνατό να εισαγάγετε μια ρητή τιμή για μια στήλη ταυτότητας στον πίνακα "πίνακας" εάν το IDENTITY_INSERT έχει οριστεί σε OFF.

Απλώς, εάν λάβετε αυτό το σφάλμα στον διακομιστή SQL, εκτελέστε αυτό το ερώτημα,

SET IDENTITY_INSERT Name table ON

Για παράδειγμα, εάν το όνομα του πίνακα είναι student, τότε το ερώτημα μοιάζει με αυτό: SET IDENTITY_INSERT μαθητή ON

Εάν λαμβάνετε αυτό το σφάλμα στην εφαρμογή Ιστού σας ή χρησιμοποιείτε πλαίσιο οντοτήτων, εκτελέστε πρώτα αυτό το αίτημα Διακομιστής SQLκαι ενημέρωση μοντέλο οντότητας (αρχείο .edmx)και δημιουργήστε έργο,και αυτό το σφάλμα θα λυθεί

Το πρόβλημα είναι με τη χρήση μη εκτυπωτικού DBContext ή DBSet, εάν χρησιμοποιείτε μια διεπαφή και εφαρμόζετε τη μέθοδο savechanges με γενικό τρόπο

Εάν αυτή είναι η περίπτωσή σας, προτείνω να πληκτρολογήσετε έντονα το DBContex like

MyDBContext.MyEntity.Add(mynewObject)

Οτι. .Το Savechanges θα λειτουργήσει

μην βάλετε τιμή στο OperationID γιατί θα δημιουργηθεί αυτόματα. Δοκίμασέ το:

Εισαγάγετε τιμές πίνακα (OpDescription, FilterID) ("Ενημέρωση Hierachy",1)

μπορείτε απλά να χρησιμοποιήσετε αυτόν τον τελεστή για παράδειγμα εάν το όνομα του πίνακα σας είναι σχολείο. Πριν από την εγκατάσταση, βεβαιωθείτε ότι το ID_insert έχει οριστεί σε ΕΠΙ,και μετά το αίτημα εισαγωγής, γυρίστε το intest_id ΜΑΚΡΙΑ ΑΠΟ

SET IDENTITY_INSERT School ON /* εισαγωγή ερωτήματος εισάγετε τον κωδικό εδώ */ SET IDENTITY_INSERT School OFF

Και αν χρησιμοποιείτε Oracle SQLΠρογραμματιστής για σύνδεση, μην ξεχάσετε να προσθέσετε / sqldev:stmt /

/ sqldev:stmt/set ID_insert TABLE on;

Υπάρχουν δύο διαφορετικοί τρόποιγράφοντας καταχωρήσεις INSERT χωρίς σφάλματα:

1) Όταν το IDENTITY_INSERT είναι απενεργοποιημένο. ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ ID ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΕΙΝΑΙ ΠΡΑΓΜΑΤΙΚΟ

2) Όταν το IDENTITY_INSERT έχει οριστεί σε ON. ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ ID ΠΡΕΠΕΙ ΝΑ ΕΙΝΑΙ ΠΡΑΓΜΑΤΙΚΟ

Σύμφωνα με το παρακάτω παράδειγμα από τον ίδιο πίνακα που δημιουργήθηκε με το πρωτεύον κλειδί IDENTITY:

ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ. (ID INT IDENTITY(1,1) PRIMARY KEY, LastName VARCHAR(40) NOT NULL, FirstName VARCHAR(40));

1) Στο πρώτο παράδειγμα, μπορείτε να εισαγάγετε νέες εγγραφές στον πίνακα χωρίς να εμφανιστεί σφάλμα όταν το IDENTITY_INSERT είναι απενεργοποιημένο. «ΑΝΑΓΝΩΡΙΣΤΙΚΟ ΠΡΩΤΟΓΕΝΙΚΟ ΚΛΕΙΔΙ » ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΕΙΝΑΙ ΠΑΡΟΥΣΑαπό τις δηλώσεις "INSERT IN", και μια μοναδική τιμή αναγνωριστικού θα προστεθεί αυτόματα:.Εάν το αναγνωριστικό υπάρχει στο INSERT σε αυτήν την περίπτωση, θα λάβετε το σφάλμα "Δεν είναι δυνατή η εισαγωγή μιας ρητής τιμής για τον προσδιορισμό μιας στήλης στον πίνακα..."

SET IDENTITY_INSERT . ΜΑΚΡΙΑ ΑΠΟ; ΕΙΣΑΓΩΓΗ ΣΤΟ . (FirstName,LastName) VALUES ("JANE","DOE"); INSERT INTO INTO Persons (FirstName,LastName) ΤΙΜΕΣ ("JOE","BROWN");

2) Στο δεύτερο παράδειγμα, μπορείτε να εισαγάγετε νέες εγγραφές στον πίνακα χωρίς να εμφανιστεί σφάλμα όταν είναι ενεργοποιημένο το IDENTITY_INSERT. «ΑΝΑΓΝΩΡΙΣΤΙΚΟ ΠΡΩΤΟΓΕΝΙΚΟ ΚΛΕΙΔΙ » ΠΡΕΠΕΙ ΝΑ ΕΙΝΑΙ ΠΡΑΓΜΑΤΙΚΟαπό δηλώσεις "INSERT INTO", ενώ η τιμή ID δεν υπάρχει ακόμη: Εάν η ταυτότητα ΔΕΝ υπάρχει από το INSERT, σε αυτήν την περίπτωση θα λάβετε το σφάλμα "Μια ρητή τιμή πρέπει να είναι για τον πίνακα της στήλης ταυτότητας..."

SET IDENTITY_INSERT . ΕΠΙ; ΕΙΣΑΓΩΓΗ ΣΤΟ . (ID,FirstName,LastName) ΤΙΜΕΣ (5,"JOHN","WHITE"); ΕΙΣΑΓΩΓΗ ΣΤΟ . (ID,FirstName,LastName) ΤΙΜΕΣ (3"JACK","BLACK");

ΠΙΝΑΚΑ ΕΞΟΔΟΣ. [Τα άτομα] θα:

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

Εισάγετε τιμές για το OperationId που είναι στήλη αναγνώρισης.

Μπορείτε να συμπεριλάβετε ένα ένθετο ταυτότητας στον πίνακα, ώστε να μπορείτε να καθορίσετε τις δικές σας τιμές ταυτότητας.

SET IDENTITY_INSERT Table1 ON INSERT INTO Table1 /*Σημειώστε ότι η λίστα στηλών είναι REQUIRED εδώ, όχι προαιρετική*/ (OperationID, OpDescription, FilterID) VALUES (20, "Hierachy Update", 1) SET IDENTITY_INSERT Table1 OFF

Δεν είμαι σίγουρος τι να χρησιμοποιήσω για την "Εισαγωγή πίνακα", αλλά αν προσπαθείτε απλώς να εισαγάγετε ορισμένες τιμές, δοκιμάστε:

Εισαγάγετε τις τιμές (OpDescription,FilterID) ("Ενημέρωση Hierachy",1).

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

Υπάρχει ένα OperationId που αναφέρθηκε προηγουμένως στο αίτημα το οποίο δεν πρέπει να υπάρχει καθώς αυξάνεται αυτόματα

Εισαγάγετε τιμές πίνακα (OperationID, OpDescription, FilterID) (20"Hierachy Update",1)

οπότε το αίτημά σας θα είναι

Εισαγάγετε τιμές πίνακα (OpDescription, FilterID) ("Hierachy Update",1)



Το ID_insert έχει οριστεί σε off ms sql (11)

Δεν είμαι σίγουρος τι να χρησιμοποιήσω για την "Εισαγωγή πίνακα", αλλά αν προσπαθείτε απλώς να εισαγάγετε ορισμένες τιμές, δοκιμάστε:

Εισαγάγετε τις τιμές (OpDescription,FilterID) ("Ενημέρωση Hierachy",1).

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

Εκτελώ το ακόλουθο σενάριο στο παρακάτω σφάλμα. Ποιο είναι το σφάλμα και πώς μπορεί να λυθεί;

Διακομιστής: Msg 544, επίπεδο 16, κατάσταση 1, γραμμή 1

Δεν είναι δυνατό να εισαγάγετε μια ρητή τιμή για μια στήλη ταυτότητας στον πίνακα "πίνακας" εάν το IDENTITY_INSERT έχει οριστεί σε OFF.

Και αν χρησιμοποιείτε Oracle SQL Developer για σύνδεση, μην ξεχάσετε να προσθέσετε / sqldev:stmt /

/ sqldev:stmt/set ID_insert TABLE on;

Στον οργανισμό σας, για αυτόν τον πίνακα, προσθέστε το χαρακτηριστικό DatabaseGenerated πάνω από τη στήλη που έχει το σύνολο αναγνωριστικών:

Public int TaskId ( get; set; )

μην βάλετε τιμή στο OperationID γιατί θα δημιουργηθεί αυτόματα. Δοκίμασέ το:

Εισαγάγετε τιμές πίνακα (OpDescription, FilterID) ("Ενημέρωση Hierachy",1)

Εισάγετε τιμές για το OperationId που είναι στήλη αναγνώρισης.

Μπορείτε να συμπεριλάβετε ένα ένθετο ταυτότητας στον πίνακα, ώστε να μπορείτε να καθορίσετε τις δικές σας τιμές ταυτότητας.

SET IDENTITY_INSERT Table1 ON INSERT INTO Table1 /*Σημειώστε ότι η λίστα στηλών είναι REQUIRED εδώ, όχι προαιρετική*/ (OperationID, OpDescription, FilterID) VALUES (20, "Hierachy Update", 1) SET IDENTITY_INSERT Table1 OFF

Το πρόβλημα είναι με τη χρήση μη εκτυπωτικού DBContext ή DBSet, εάν χρησιμοποιείτε μια διεπαφή και εφαρμόζετε τη μέθοδο savechanges με γενικό τρόπο

Εάν αυτή είναι η περίπτωσή σας, προτείνω να πληκτρολογήσετε έντονα το DBContex like

MyDBContext.MyEntity.Add(mynewObject)

Οτι. .Το Savechanges θα λειτουργήσει

Εάν χρησιμοποιείτε το Liquibase για να ενημερώσετε τον SQL Server σας, πιθανότατα θα προσπαθήσετε να εισαγάγετε ένα κλειδί εγγραφής στο πεδίο autoIncrement. Αφαιρώντας τη στήλη από το ένθετο, το σενάριό σας θα πρέπει να λειτουργεί.

...

Να είστε πολύ προσεκτικοί όταν ορίζετε το IDENTITY_INSERT σε ON. Αυτή είναι μια κακή πρακτική, εκτός εάν η βάση δεδομένων βρίσκεται σε λειτουργία συντήρησης και έχει ρυθμιστεί σε έναν μόνο χρήστη. Αυτό επηρεάζει όχι μόνο το ένθετό σας, αλλά και όσους προσπαθούν να αποκτήσουν πρόσβαση στον πίνακα.

Γιατί προσπαθείτε να βάλετε μια αξία στο πεδίο της ταυτότητας;

Υπάρχει ένα OperationId που αναφέρθηκε προηγουμένως στο αίτημα το οποίο δεν πρέπει να υπάρχει καθώς αυξάνεται αυτόματα

Εισαγάγετε τιμές πίνακα (OperationID, OpDescription, FilterID) (20"Hierachy Update",1)

οπότε το αίτημά σας θα είναι

Εισαγάγετε τιμές πίνακα (OpDescription, FilterID) ("Hierachy Update",1)

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

Απλώς, εάν λάβετε αυτό το σφάλμα στον διακομιστή SQL, εκτελέστε αυτό το ερώτημα,

SET IDENTITY_INSERT Name table ON

Για παράδειγμα, εάν το όνομα του πίνακα είναι student, τότε το ερώτημα μοιάζει με αυτό: SET IDENTITY_INSERT μαθητή ON

Εάν λαμβάνετε αυτό το σφάλμα στην εφαρμογή Ιστού σας ή χρησιμοποιείτε πλαίσιο οντοτήτων, εκτελέστε πρώτα αυτό το ερώτημα στον διακομιστή SQL και ενημερώστε μοντέλο οντότητας (αρχείο .edmx)και δημιουργήστε έργο,και αυτό το σφάλμα θα λυθεί

Ερώτηση: Δεν είναι δυνατή η εισαγωγή μιας ρητής τιμής για μια στήλη ταυτότητας σε έναν πίνακα


Καλό απόγευμα.
Σφάλμα: "Δεν είναι δυνατή η εισαγωγή μιας ρητής τιμής για τη στήλη ταυτότητας στον πίνακα "Όνομα πίνακα" όταν το IDENTITY_INSERT έχει οριστεί σε OFF."
Κατανοώ ότι πρέπει να μεταβείτε στην κατάσταση ON με την ακόλουθη εντολή:
SQL
1 SET IDENTITY_INSERT TableName ON
.
Αλλά το αίτημα δεν εκτελείται... Μήπως πρέπει να καταχωρήσετε τη συγκεκριμένη βάση δεδομένων στην οποία είναι αποθηκευμένος ο πίνακας;
Πες μου σε παρακαλώ.
Ευχαριστώ.

Απάντηση:Πατήστε F5

Ερώτηση: Εισαγωγή τιμής σε πεδίο αυτόματης εισαγωγής


Γειά σου!

Γενικά, πρέπει να μεταφέρω δεδομένα από mysql σε sql server.
Δοκίμασα διαφορετικά εργαλεία, αλλά δεν συνέβη τίποτα χρήσιμο (πιθανώς επειδή οι νέοι πίνακες έχουν ελαφρώς διαφορετικά ονόματα για τα πεδία και ελαφρώς διαφορετικούς τύπους πεδίων).

Αποφάσισα ότι ήταν καλύτερο να γράψω ένα σενάριο και να το βάλω μόνος μου. Αλλά συνάντησα το γεγονός ότι το insert δεν λειτουργεί σε ένα πεδίο αυτόματης ενσωμάτωσης εάν γράψω ρητά την τιμή μου σε αυτό. Για παράδειγμα:

Το ίδιο όμως.
(αναγνωριστικό πεδίου μοναδικό, πρωτεύον κλειδί, αυτόματη εισαγωγή.)

Τι να κάνετε, πού να σκάψετε;

Ευχαριστώ πολύ!

Απάντηση:Τώρα προσπαθώ να κάνω εξαγωγή από μια τοπική βάση δεδομένων σε έναν απομακρυσμένο διακομιστή.
Η εισαγωγή μερικών εκατομμυρίων σειρών σε ένα απομακρυσμένο μηχάνημα είναι αρκετά δυσάρεστη. Χρησιμοποιώ το εργαλείο SSMS και δίνει το σφάλμα "Δεν ήταν δυνατή η εισαγωγή δεδομένων στη στήλη "αναγνωριστικό" μόνο για ανάγνωση.
Δεδομένου ότι τώρα χρησιμοποιώ εργαλεία, δεν υπάρχει πουθενά να γράψω SQL.
Όπως καταλαβαίνω, πρέπει να αφαιρέσουμε τον περιορισμό από το πεδίο (auto incr), δεν καταλαβαίνω πώς να το κάνω, πού να σκάψω;

Ευχαριστώ!

ΥΣΤΕΡΟΓΡΑΦΟ. Απομακρυσμένος διακομιστής - azure.

Προστέθηκε μετά από 8 λεπτά
Χαμός μου, πέρασα μισή μέρα γκουγκλάροντας και δεν μπορούσα να το βρω, αλλά αφού έγραψα την ανάρτηση, βρήκα μια λύση. Αποδεικνύεται ότι στο SSMS, στο παράθυρο "Επιλογή πίνακες προέλευσης και προβολές", πρέπει να κάνετε κλικ στο τους απαιτούμενους πίνακες, κάντε κλικ στο κουμπί "Επεξεργασία" στο κάτω μέρος και επιλέξτε το πλαίσιο ελέγχου "Να επιτρέπεται η εισαγωγή στη στήλη". αναγνωριστικά".
Επίσης, παρακολουθήστε προσεκτικά την κωδικοποίηση του διακομιστή σας και του απομακρυσμένου διακομιστή βάσης δεδομένων κατά την εξαγωγή, πρέπει να ταιριάζει.

Ερώτηση: Εισαγάγετε ένα κελί σε ένα υπάρχον πεδίο πίνακα


Γειά σου!
Υπάρχει ένα πρόβλημα
Υπάρχει ένας πίνακας στη βάση δεδομένων που συμπληρώνεται όταν ο χρήστης εισάγει πεδία φόρμας html
Αυτός ο πίνακας εμφανίζεται απευθείας στον ιστότοπο.
Πώς να εφαρμόσετε την προσθήκη μιας ακόμη σειράς σε κάθε γραμμή ενός πίνακα βάσης δεδομένων μορφή html
Με άλλα λόγια, υπάρχει μια διαφήμιση που ανέβασε ένας χρήστης στον ιστότοπο. Όλες αυτές οι διαφημίσεις εμφανίζονται η μία μετά την άλλη μέσω της ετικέτας br. Πώς να επισυνάψετε μια άλλη φόρμα html σε κάθε διαφήμιση που αποτελείται από ένα κουμπί: "Θα πάω!" όταν πατηθεί, η τιμή της στήλης με μοναδικό αναγνωριστικό αυξήθηκε κατά 1 ξεκινώντας από το μηδέν. Η αρχή της συμπάθειας στο VKontakte
Είμαι αρχάριος. Επομένως, η γνώμη των ειδικών σχετικά με τη λύση αυτού του προβλήματος είναι ενδιαφέρουσα. Υποφέρω εδώ και μια εβδομάδα. Ευχαριστώ εκ των προτέρων

Ερώτηση: Πώς μπορώ να προσθέσω ή να αφαιρέσω τιμές από διαφορετικούς πίνακες στην Access 2010; Συγκεκριμένα οι τιμές στηλών


Πώς να προσθέσετε ή να αφαιρέσετε τιμές από διαφορετικούς πίνακες στην Access 2010; Συγκεκριμένα οι τιμές στηλών
Λοιπόν, οποιαδήποτε άλλη ενέργεια.

Απάντηση:

μήνυμα από Nikon3

Είναι απαραίτητο να υλοποιηθεί αυτή η λειτουργία:
«Προσδιορίστε πόσα χρήματα ανά είδος πλαστικές κάρτεςξοδεύονται από πελάτες σε τον προηγούμενο μήνα."

Είναι αδύνατο να λυθεί το πρόβλημα στη δομή που βρίσκεται στη βάση δεδομένων σας. Δεν υπάρχει ημερομηνία στον πίνακα εξόδων! Εισαγάγετε την ημερομηνία της λειτουργίας στην ενότητα "Έξοδα". Χρήματα», το συμπλήρωσε από το φανάρι. Αν υποθέσουμε ότι ο «τελευταίος» μήνας είναι ο τρέχων, τότε το αίτημα έχει ως εξής

SQL
1 2 3 4 5 6 ΕΠΙΛΟΓΗ Χάρτες. [Κωδικός κάρτας], Χάρτες. [ Τύπος κάρτας] , ΠΟΣΟ ([ Δαπάνες μετρητών]. [ Αριθμός κεφαλαίων που αναλήφθηκαν από τον λογαριασμό] ) ΩΣ [ Ποσό δαπάνης] ΑΠΟ ([ Δαπάνες μετρητών] ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ Πελάτες ON [ Δαπάνες μετρητών] . [ Ονοματεπώνυμο πελάτη] = Πελάτες [ Κωδικός πελάτη] ) Κάρτες INNER JOIN ON Clients. [Τύπος Κάρτας] = Κάρτες. [Κωδικός κάρτας] WHERE MONTH ([ Cash Expense]. Ημερομηνία συναλλαγής) = MONTH (DATE () ) ΟΜΑΔΑ ΑΝΑ ΚΑΡΤΕΣ. [Κωδικός κάρτας], Χάρτες. [Τύπος κάρτας], Χάρτες. [Τύπος κάρτας]

Δείτε το συνημμένο για το ερώτημα "Έξοδα του προηγούμενου μήνα"

Ερώτηση: Εκτύπωση τιμών μιας στήλης που δεν είναι ίσες με τις τιμές μιας άλλης στήλης


Είναι απαραίτητο να εμφανιστούν οι σειρές του πίνακα 1 με στήλες "A", "B", "C" με την προϋπόθεση ότι οι τιμές της στήλης "C" δεν είναι ίσες με τις τιμές της στήλης "D" από Πίνακας 2. Εάν γράψετε την συνθήκη όπου "Β"<>Στη συνέχεια, το "G" δίνει τα πάντα πιθανές επιλογές(συγκρίνοντας την πρώτη τιμή μιας στήλης με όλες με τη σειρά τους από μια άλλη). Είναι απαραίτητο να εξαιρεθούν οι τιμές του "G" από το "B". Δεδομένα του ίδιου τύπου.

Ερώτηση: Πώς μπορώ να μάθω πόση μνήμη καταλαμβάνει ένας πίνακας και κάθε στήλη στον πίνακα;


Πώς μπορώ να μάθω πόση μνήμη χρησιμοποιεί ένας πίνακας και κάθε στήλη σε έναν πίνακα της Access;

Απάντηση:Από βοήθεια. Τύποι πεδίων βάσεων δεδομένων

ΚείμενοΚείμενο ή συνδυασμός κειμένου και αριθμών, όπως μια διεύθυνση, και αριθμοί που δεν απαιτούν υπολογισμούς, όπως αριθμοί τηλεφώνου, αριθμοί μετοχών ή ταχυδρομικοί κώδικες. Αποθηκεύονται μόνο οι χαρακτήρες που εισάγονται στο πεδίο, οι θέσεις που δεν χρησιμοποιούνται στο πεδίο κειμένου δεν αποθηκεύονται. Για να ελέγξετε τον μέγιστο αριθμό χαρακτήρων που εισάγονται, ορίστε την ιδιότητα Μέγεθος πεδίου.έως 255 χαρακτήρες.
Πεδίο MEMOΜεγάλο κείμενο ή αριθμοί, όπως σημειώσεις ή περιγραφές.Έως 64.000 χαρακτήρες που εισάγονται χειροκίνητα ή έως 1 GB μέσω προγραμματισμού.
ΑριθμητικόςΑριθμητικά δεδομένα που χρησιμοποιούνται για μαθηματικούς υπολογισμούς, εξαιρουμένων των υπολογισμών που αφορούν χρηματικές συναλλαγές (χρήση νομισματικού τύπου). Για να ορίσετε έναν αριθμητικό τύπο, ορίστε την ιδιότητα FieldSize1, 2, 4 ή 8 byte. 16 byte μόνο για κωδικούς αναπαραγωγής
Ημερομηνία ώραΗμερομηνίες και ώρες8 byte.
ΝομισματικόςΤιμές νομισμάτων. Ο τύπος νομίσματος χρησιμοποιείται για την αποφυγή στρογγυλοποίησης κατά τους υπολογισμούς. Υποθέτει έως και 15 χαρακτήρες στο ακέραιο μέρος του αριθμού και 4 στο κλασματικό μέρος8 byte.
ΜετρητήςΑυτόματη εισαγωγή διαδοχικών (που διαφέρει κατά 1) ή τυχαίων αριθμών κατά την προσθήκη μιας εγγραφής4 byte. 16 byte μόνο για αναπαραγωγή κώδικα.
ΛογικόςΠεδία που περιέχουν μόνο μία ή δύο τιμές, όπως Yes/No, True/False, Enabled/Disabled1 bit.
OLE ΑντικείμεναΑντικείμενα (για παράδειγμα, έγγραφα Microsoft Word, ΥΠΟΛΟΓΙΣΤΙΚΑ ΦΥΛΛΑ Microsoft Excel, εικόνες, ήχοι και άλλα δεδομένα) που δημιουργούνται σε άλλα προγράμματα που χρησιμοποιούν το πρωτόκολλο OLE. Τα αντικείμενα μπορούν να συνδεθούν ή να ενσωματωθούν σε έναν πίνακα Microsoft Access. Για να εμφανίσετε ένα αντικείμενο OLE σε μια φόρμα ή μια αναφορά, πρέπει να χρησιμοποιήσετε ένα συνημμένο πλαίσιο αντικειμένουΈως 1 gigabyte (περιορίζεται από χώρο στο δίσκο).
ΥπερσυνδέσειςΤο πεδίο στο οποίο αποθηκεύονται οι υπερσύνδεσμοι. Ένας υπερσύνδεσμος μπορεί να είναι είτε μια διαδρομή UNC είτε μια διεύθυνση URL.Κάθε τμήμα μιας υπερσύνδεσης μπορεί να περιέχει έως και 2048 χαρακτήρες

Ένα πεδίο καταλαμβάνει μνήμη ίση με το άθροισμα των μηκών στις εγγραφές. Πίνακας - το άθροισμα των μηκών των πεδίων. Υπάρχουν επίσης ευρετήρια, διάφοροι βοηθητικοί πίνακες και πίνακες συστήματος, ιδιότητες και άλλα πράγματα που καταλαμβάνουν τη μνήμη

Για την Access 64-bit υπάρχουν άλλοι, μεγαλύτεροι τύποι πεδίων

Ερώτηση: Προγραμματισμός βάσης δεδομένων: Ο αριθμός των στηλών σε έναν πίνακα επηρεάζει την απόδοση;


Ο αριθμός των στηλών σε έναν πίνακα επηρεάζει την απόδοση;

Πώς θα ήταν πιο αποτελεσματικό να δημιουργηθούν δύο χρονικά πεδία; , count_timeκαι εξάγουμε δύο τιμές
ή δημιουργήστε ένα πεδίο tt στο οποίο θα διαχωρίσετε αυτές τις τιμές με το σύμβολο "|" και εξαγάγετε διαχωρίζοντάς τα SUBSTRING_INDEX(tt , "|", 1) AS time , SUBSTRING_INDEX(tt , "|", -1) AS count_time

Απάντηση:

μήνυμα από WeMeSder

SUBSTRING_INDEX AS ώρα

Τι είναι αυτό και πού το βρήκατε σε πρόσβαση;

μήνυμα από WeMeSder

πώς θα ήταν πιο αποτελεσματικό να δημιουργήσετε δύο πεδία time, count_time και να ανακτήσετε δύο τιμές

Σίγουρα αυτή η επιλογή. Έχετε δύο ΑΡΙΘΜΟΥΣ, ουσιαστικά, αυτοί είναι καλοί - συμπαγείς και γρήγοροι - τύποι δεδομένων.

Θέλετε 1) να τις μετατρέψετε σε συμβολοσειρές, οι οποίες καταλαμβάνουν περισσότερο χώρο και η επεξεργασία τους γίνεται πιο αργά
2) ο τύπος δεδομένων ημερομηνίας δεν επιτρέπει αριθμούς - π.χ. επίσης γράψτε μόνοι σας μια επιταγή για την εγκυρότητα των ημερομηνιών
3) η ταξινόμηση είναι διαφορετική για μια ημερομηνία ως ημερομηνία και για μια ημερομηνία ως συμβολοσειρά, σας ήρθε στο μυαλό;
4) Λοιπόν, η ιδέα της συσσώρευσης δεδομένων με διαφορετικές έννοιες σε ένα πεδίο είναι απολύτως επική

Ερώτηση: Πώς να ταξινομήσετε μια στήλη σε έναν πίνακα από το Α στο Ω χρησιμοποιώντας VBA;


Γεια σε όλους!

Πες μου πώς να ταξινομήσω μια στήλη σε έναν πίνακα από το Α έως το Ω χρησιμοποιώντας VBA;

Απάντηση:Ο σχεδιαστής πίνακα έχει μια ιδιότητα Ταξινόμηση. Εκεί μπορείτε να γράψετε τα ονόματα των πεδίων που πρόκειται να ταξινομηθούν και τη σειρά ταξινόμησης (Asc, Desc). Σε έναν ανοιχτό πίνακα, μπορείτε να επιλέξετε μια στήλη και να ορίσετε τη σειρά ταξινόμησης. Εάν αποθηκεύσετε την εικόνα της οθόνης του φύλλου δεδομένων, τότε η σειρά θα διατηρηθεί κατά τις επόμενες κλήσεις. Μπορείτε να αντιστοιχίσετε μια παραγγελία σε έναν ανοιχτό πίνακα (φόρμα, ερώτημα) μέσω προγραμματισμού, χρησιμοποιώντας, για παράδειγμα, την εντολή SetOrderBy
ως (επιλογή "Remarque, Erich, Maria, Rodriguez" "Φερνάντεθ, Πέρεθ, Βλαντιμίρ, Καστούλοβιτς"από την ένωση διπλή όλα επιλεγμένα "Χοζού, Γκονζάλες, ντε Λεόν"από την ένωση διπλή όλα επιλεγμένα "Karam, Abu, Il, Khatab, Ogly"από διπλό) επιλέξτε fio από t?

2) Αυτόματη συμπλήρωση: Εισαγωγή/ενημέρωση ενεργοποίησης + λειτουργία μεταγραφής ρωσικών γραμμάτων
ή, εναλλακτικά, μια εικονική στήλη

mytransliterationfunction(οικογένεια)

ΥΣΤΕΡΟΓΡΑΦΟ. Συχνά, η λατινική ορθογραφία μπορεί να μην ταιριάζει με αυτήν που δημιουργείται αυτόματα
για παράδειγμα επάνω τραπεζικές κάρτες, οπότε θα παρείχα, εκτός από το αυτόματο γέμισμα, και χειροκίνητο

Ερώτηση: Λανθασμένη συμπλήρωση της στήλης αναγνωριστικού κατά την εισαγωγή δεδομένων


Καλή μέρα. Παρακαλώ πείτε μου ποιος ξέρει ποιος μπορεί να είναι ο λόγος.
Χρησιμοποιώ SQL Manager 2008 από τον SQL Server.
δημιουργώ νέο τραπέζιμε μια στήλη αναγνωριστικού, που καθορίζει την αρχική τιμή - 1, προσαύξηση - 1.
Στη συνέχεια, γράφω δεδομένα σε αυτό με ένα αίτημα όπως:

Εισάγετε σε πένυ. τιμές peny (id_customer, period_calc) (@id_customer, @period_calc)

Σε αυτήν την περίπτωση, για κάποιο λόγο η στήλη αναγνωριστικού συμπληρώνεται όχι από μία, αλλά από τιμή ίση με = Μέγιστη τιμή αναγνωριστικού στον πίνακα + αριθμός εισαγόμενων σειρών +1.

Επισυνάπτεται ένα στιγμιότυπο οθόνης του πίνακα. Σε αυτήν την περίπτωση, εισήχθησαν πρώτα 2 εγγραφές, μετά άλλες 5 και μετά άλλες 2.

Το αρχείο επισυνάπτεται στο μήνυμα. Μέγεθος - 7Kb

Απάντηση:Σαφώς κατανοητό. Ευχαριστώ.)