Αιτία για τη χρήση @@ ταυτότητας και όχι SCOPE\_IDENTITY




Σε μια βάση δεδομένων του SQL Server 2005, ένας από τους απομακρυσμένους προγραμματιστές μας απλά ελέγχεται σε μια αλλαγή σε μια αποθηκευμένη διαδικασία που άλλαξε μια «επιλέξτε SCOPE\_IDENTITY» σε «επιλέξτε @@ ταυτότητα». Γνωρίζετε τυχόν λόγους για τους οποίους θέλετε να χρησιμοποιήσετε @@ ταυτότητα πάνω SCOPE\_IDENTITY;
`@@IDENTITY`θα επιστρέψει την τελευταία τιμή ταυτότητα που εκδίδεται από την τρέχουσα περίοδο. `SCOPE_IDENTITY()`επιστρέφει την τελευταία τιμή ταυτότητα κατά την τρέχουσα περίοδο και στο ίδιο πεδίο. Συνήθως είναι το ίδιο, αλλά υποθέτουν μια σκανδάλη ονομάζεται η οποία εισάγεται κάτι κάπου λίγο πριν από την τρέχουσα κατάσταση. `@@IDENTITY`θα επιστρέψει την τιμή ταυτότητας από την `INSERT IGNORE` δήλωση της σκανδάλης, δεν είναι η δήλωση ένθετο του μπλοκ. Είναι συνήθως ένα λάθος, εκτός αν ξέρει τι κάνει.
Το πρόβλημα προκλήθηκε λόγω των ειδικών χαρακτήρων. Δεν είχα φανταστεί ότι «$» θα ήταν μια τέτοια μεγάλη υπόθεση σε κωδικούς πρόσβασης. Τέλος πάντων μπορείτε να βρείτε μια λύση για αυτό [εδώ](https://nadvi.blogspot.com/2011/02/oracle-password-with-or-special.html) . Η προτιμώμενη μέθοδος είναι να χρησιμοποιήσετε πραγματικά την ιδιότητα υπό όρους για να τυλίξει τις κλήσεις εντοπισμού σφαλμάτων σας, μην χρησιμοποιήσετε τις οδηγίες μεταγλωττιστή. #ifs μπορεί να πάρει δύσκολες και μπορεί να οδηγήσει σε περίεργα προβλήματα κατασκευής.


Ένα παράδειγμα της χρήσης ενός υπό όρους χαρακτηριστικό είναι η εξής (σε C #, αλλά λειτουργεί σε VB.NET πολύ):



```
[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

```

Κατά τη μεταγλώττιση, χωρίς το σετ σημαία DEBUG, κάθε κλήση προς WriteDebug θα καταργηθούν όπως υποτίθεται συνέβαινε με Debug.Write (). κάτι έχει γίνει λάθος στην περίπτωσης σου διότι αυτή η μετάφραση χρησιμοποιείται σε αρκετές επαγγελματικές εγκαταστάσεις εταιρειών (με εξαίρεση κάποιες περιπτώσεις που είναι custom μεταφράσεις εξειδίκευσης π.χ. ιατρεία, οδοντιατρεία, δικηγορικά γραφεία και δεν είναι online) Συχνά αυτό επιτυγχάνεται με τη χρήση [«Driven δεδομένων Συνδρομές»](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , αλλά αυτή η λειτουργία είναι διαθέσιμη μόνο σε ορισμένες εκδόσεις του SQL: Enterprise και Business Intelligence, αλλά όχι στο πρότυπο.


Έτσι, υπάρχει μια σειρά από δημιουργικές λύσεις. Αλλά δεν μου αρέσει κάποια από αυτές, και απαιτούν ένα δίκαιο κομμάτι της εργασίας έξω από SSRS.


Οι λύσεις που έχω δει περιλαμβάνουν: Δημιουργία της εγγραφής και στη συνέχεια απενεργοποίηση ή επιτρέπουν την εργασία SQL που στέλνει τη συνδρομή (που προσδιορίζονται από GUID.)


Δημιουργήστε ένα .exe .NET περιτύλιγμα για να χειριστεί την αποστολή του email. Μπορεί να εκτελέσετε το ερώτημα πρώτα να δούμε πόσα επέστρεψε σειρές, και στη συνέχεια, αν χρειαστεί, να δημιουργήσει την έκθεση και να συμπεριληφθεί σε ένα email. νομίζω ότι ο 5.13 δεν είναι ακόμη σταθερός(είναι σε στάδιο rc εκδόσεων απ’ ότι βλέπω) κι έτσι εκτός του ότι δεν είναι βέβαιο ότι θα λυθεί το πρόβλημά σου μπορεί να δημιουργηθούν και άλλα περισσότερα. καλύτερα νομίζω είναι(αφού όπως γράφεις το πρόβλημα δημιουργήθηκε μετά την τελευταία αναβάθμιση του … Όχι, δεν κάνει καμία διαφορά.


Προσωπικά προτιμώ το στυλ που σας δείχνουν στο Q3, μερικοί από τους συναδέλφους μου προτιμούν το στυλ στο Q1. Δεν ξέρω κανέναν που θα εξετάσει ποτέ ούτε από αυτούς να είναι *λάθος* .


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


Έλεγξα (SQL Server 2005) στο σχέδιο εκτέλεσης των δύο ερωτήματα με τα τελούμενα κατηγόρημα με διαφορετική σειρά, και όπως αναμένεται να είναι πανομοιότυπα. <p>το <strong>server</strong> (που αποστέλλεται το αίτημα post) πρέπει να περιλαμβάνει την κεφαλίδα <code>access-control-allow-headers</code> (κλπ) <strong>στην απάντησή του</strong>. η τοποθέτησή τους στο αίτημά σας από τον πελάτη δεν έχει καμία επίδραση.</p><p>αυτό οφείλεται στο γεγονός ότι εναπόκειται στον διακομιστή να καθορίσει ότι δέχεται αιτήσεις διασταυρούμενης προέλευσης (και ότι επιτρέπει την κεφαλίδα <code>content-type</code> αίτησης και ούτω καθεξής) - ο πελάτης δεν μπορεί να αποφασίσει για τον εαυτό του ότι ένας δεδομένος διακομιστής πρέπει να επιτρέπει την cors.</p> Προσθέτοντας την `--decorate`επιλογή θα εμφανιστούν οι αναφορές που δείχνουν προς κάθε commit. Έτσι, για παράδειγμα, θα δείτε **HEAD** και **προέλευσης / HEAD** (ή οτιδήποτε άλλο) στις σωστές θέσεις.


Μπορούν ακόμη και να είναι σε αρκετά χρώματα, αν έχετε αυτό ενεργοποιηθεί.


PS. ευχαριστώ για να με κάνει να ελέγξετε αυτό - είναι πραγματικά πολύ ωραία, ειδικά με τον τρόπο που δείχνει επίσης διάφορες κρύπτες μου. update

κατάφερα να το φτιάξω. το πρόβλημα οφειλόταν ότι η ρύθμηση:

config interface 'wan'

option ifname 'dsl0.835'

option device 'dsl0'

option proto 'pppoe'

option username 'guest@adsl.gr'

option password '******'

option ipv6 'none'

option keepalive '10'

option … δες ένα απόσπασμα με την εντολή της αποσύνδεσης για να καταλάβεις:

listdelegate {

id: leavebutton

text: i18n("log out")

highlight: delegatehighlight

icon: "system-log-out"

onclicked: {

ex…