SQL για να προσδιορίσετε αν ένα μόνο κομμάτι δεδομένων εκτελείται με κλειδί σε μια ενημέρωση ή εισαγωγή

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Σε μια διαδικασία όπως η Ενημέρωση εάν υπάρχει κλειδί ή Εισαγωγή εάν δεν υπάρχει κλειδί, μια επιλογή εκτελείται συνήθως με βάση το κλειδί και η διαδικασία καθορίζεται ελέγχοντας αν υπάρχει μία περίπτωση. SQL Server 2008 προσθέτει επίσης μια πρόταση "συγχώνευσης" που σας επιτρέπει να εκτελέσετε μια ενημέρωση και μια εισαγωγή (και στη συνέχεια να διαγράψετε) με μία μόνο πρόταση. Ωστόσο, πρόκειται για σύγκριση δύο πινάκων και δεν είναι κατάλληλος για μεμονωμένα δεδομένα.

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

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

Η λέξη κλειδί εδώ είναι "@@ROWCOUNT". Το @@ROWCOUNT μπορεί να ανακτήσει τον αριθμό των γραμμών στις οποίες εφαρμόστηκε το προηγούμενο SQL. Ο προηγούμενος κώδικας εκτελεί πρώτα την αναφορά Ενημέρωση και, εάν έχει ενημερωθεί, @@ROWCOUNT επιστρέφει 1 ή μεγαλύτερο, επομένως δεν εκτελεί την επόμενη δήλωση Insert. Αντίθετα, εάν δεν ενημερώνεται καμία γραμμή στη δήλωση ενημέρωσης, @@ROWCOUNT επιστρέφει 0, οπότε εκτελέστε την απόφαση Insert by IF statement.

Δεδομένου ότι το παραπάνω SQL είναι ένα πρότυπο, αντικαταστήστε τα ονόματα στηλών και τις τιμές που θα ενημερωθούν την κατάλληλη στιγμή. @value είναι απλώς ένα όνομα μεταβλητής, οπότε αντικαταστήστε το με την τιμή που θέλετε να ενημερώσετε.