Εάν κάνετε μετεγκατάσταση των δεδομένων της Access στον SQL Server ή δημιουργήσετε μια λύση της Access με τον SQL Server ως βάση δεδομένων παρασκηνίου, είναι σημαντικό να γνωρίζετε τις διαφορές μεταξύ της Access SQL και του SQL Server Transact SQL (TSQL). Ακολουθούν είναι οι σημαντικές παραλλαγές που πρέπει να γνωρίζετε ώστε η λύση σας να λειτουργεί σύμφωνα με τα προβλεπόμενα.
Για περισσότερες πληροφορίες, ανατρέξτε στα άρθρα Access SQL: βασικές έννοιες, λεξιλόγιο και σύνταξη και Αναφορά Transact-SQL.
Διαφορές στη σύνταξη και τις παραστάσεις
Υπάρχουν ορισμένες διαφορές στη σύνταξη και στις παραστάσεις για τις οποίες απαιτείται μετατροπή. Ο ακόλουθος πίνακας συνοψίζει τις πιο συνηθισμένες.
Διαφορά |
Access SQL |
SQL Server TSQL |
Χαρακτηριστικό σχεσιακής βάσης δεδομένων |
Συνήθως ονομάζεται πεδίο |
Συνήθως ονομάζεται στήλη |
Λεκτικές σταθερές συμβολοσειρών |
Εισαγωγικό ("), όπως "Στέλλα Κωστίδου" |
Απόστροφος ('), όπως 'Στέλλα Κωστίδου' |
Λεκτικές σταθερές ημερομηνιών |
Σύμβολο δίεσης (#), όπως #1/1/2019# |
Απόστροφος ('), όπως '1/1/2019' |
Πολλαπλοί χαρακτήρες μπαλαντέρ |
Αστερίσκος (*), όπως "Κατ*" |
Ποσοστό (%), όπως "Κατ%" |
Μονός χαρακτήρας μπαλαντέρ |
Αγγλικό ερωτηματικό (?), όπως "Κατ?" |
Χαρακτήρας υπογράμμισης (_), όπως "Κατ_" |
Τελεστής υπολοίπου διαίρεσης |
Τελεστής MOD, όπως Τιμή1 MOD Τιμή2 |
Ποσοστό (%), όπως Τιμή1 % Τιμή2 |
Δυαδικές τιμές |
WHERE Bitvalue = [True | False] Ή WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Παράμετροι |
[<Ένα όνομα που δεν είναι καθορισμένη στήλη>] Ή Στην προβολή SQL, χρησιμοποιήστε τη δήλωση Parameters της SQL |
@ParamName |
Σημειώσεις
-
Η Access χρησιμοποιεί χαρακτήρες εισαγωγικών (") γύρω από τα ονόματα των πινάκων και τα αντικείμενα. Η T-SQL μπορεί να τα χρησιμοποιήσει για ονόματα πινάκων με κενά διαστήματα, αλλά αυτή δεν είναι η συνήθης πρακτική ονοματοδοσίας. Στις περισσότερες περιπτώσεις, τα ονόματα αντικειμένων θα πρέπει να μετονομαστούν χωρίς κενά διαστήματα, ωστόσο τα ερωτήματα πρέπει να συνταχθούν ξανά ώστε να απεικονίζουν τα ονόματα των νέων πινάκων. Χρησιμοποιήστε αγκύλες [] για πίνακες που δεν είναι δυνατό να μετονομαστούν αλλά που δεν συμμορφώνονται με τα πρότυπα ονοματοδοσίας. Η Access προσθέτει επίσης επιπλέον παρενθέσεις γύρω από τις παραμέτρους στα ερωτήματα, ωστόσο αυτές μπορούν να καταργηθούν στην T-SQL.
-
Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε την κανονική μορφή ημερομηνίας, εεεε-μμ-ηη ωω:λλ:δδ, που είναι ένα πρότυπο ODBC για ημερομηνίες που είναι αποθηκευμένες ως χαρακτήρες, το οποίο παρέχει έναν συνεπή τρόπο εμφάνισής τους σε όλες τις βάσεις δεδομένων και διατηρεί τη σειρά ταξινόμησης των ημερομηνιών.
-
Για να αποφύγετε τη σύγχυση κατά τη σύγκριση δυαδικών τιμών, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύγκριση για την Access και τον SQL Server:
-
Δοκιμή για τιμή false WHERE Bitvalue = 0
-
Δοκιμή για τιμή true WHERE Bitvalue <> 0
-
Τιμές null
Μια τιμή null δεν είναι ένα κενό πεδίο που σημαίνει "καμία τιμή". Μια τιμή null είναι ένα σύμβολο κράτησης θέσης που σημαίνει ότι τα δεδομένα λείπουν ή είναι άγνωστα. Τα συστήματα βάσεων δεδομένων που αναγνωρίζουν τιμές null υλοποιούν τη "λογική τριών τιμών", το οποίο σημαίνει ότι κάτι μπορεί να είναι αληθές, ψευδές ή άγνωστο. Εάν δεν χειρίζεστε σωστά τις τιμές null, ενδέχεται να λάβετε εσφαλμένα αποτελέσματα κατά την πραγματοποίηση συγκρίσεων ισότητας ή κατά την αξιολόγηση όρων WHERE. Ακολουθεί μια σύγκριση του τρόπου με τον οποίο η Access και ο SQL Server χειρίζονται τις τιμές null.
Απενεργοποίηση τιμών null σε έναν πίνακα
Στην Access και στον SQL Server, η προεπιλεγμένη συμπεριφορά είναι ότι οι τιμές null είναι ενεργοποιημένες. Για να απενεργοποιήσετε τις τιμές null σε μια στήλη πίνακα, κάντε τα εξής:
-
Στην Access, ορίστε την ιδιότητα "Απαιτείται" ενός πεδίου σε "Ναι".
-
Στον SQL Server, προσθέστε το χαρακτηριστικό NOT NULL σε μια στήλη σε μια πρόταση CREATE TABLE.
Δοκιμή για τιμές null σε έναν όρο WHERE
Χρησιμοποιήστε τα κατηγορήματα IS NULL και IS NOT NULL:
-
Στην Access, χρησιμοποιήστε IS NULL ή IS NOT NULL. Για παράδειγμα:
SELECT … WHERE column IS NULL.
-
Στον SQL Server, χρησιμοποιήστε IS NULL ή IS NOT NULL. Για παράδειγμα:
SELECT … WHERE field IS NULL
Μετατροπή τιμών null με συναρτήσεις
Χρησιμοποιήστε τις συναρτήσεις null για την προστασία των παραστάσεων και τη λήψη εναλλακτικών τιμών:
-
Στην Access, χρησιμοποιήστε τη συνάρτηση NZ (τιμή, [valueifnull]) που επιστρέφει την τιμή 0 ή άλλη τιμή. Για παράδειγμα:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
Στον SQL Server, χρησιμοποιήστε τη συνάρτηση ISNULL (τιμή, τιμή_αντικατάστασης) που επιστρέφει την τιμή 0 ή άλλη τιμή. Για παράδειγμα:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Κατανόηση των επιλογών βάσεων δεδομένων
Ορισμένα συστήματα βάσεων δεδομένων διαθέτουν ιδιόκτητους μηχανισμούς:
-
Στην Access, δεν υπάρχουν επιλογές βάσης δεδομένων που να αφορούν την τιμή Null.
-
Στον SQL Server, μπορείτε να χρησιμοποιήσετε την επιλογή SET ANSI_NULLS OFF για απευθείας συγκρίσεις ισότητας με τη NULL, χρησιμοποιώντας τους τελεστές = και <>. Συνιστάται να μην χρησιμοποιείτε αυτή την επιλογή, επειδή έχει καταργηθεί και αυτό μπορεί να προκαλέσει σύγχυση σε άλλα άτομα που βασίζονται στον χειρισμό σύμφωνα με το πρότυπο ISO.
Μετατροπή και διανομή ρόλων
Κάθε φορά που εργάζεστε με δεδομένα ή προγραμματισμό, υπάρχει μόνιμη ανάγκη για μετατροπή από έναν τύπο δεδομένων σε έναν άλλο. Η διαδικασία μετατροπής μπορεί να είναι απλή ή σύνθετη. Συνηθισμένα προβλήματα που πρέπει να σκεφθείτε είναι τα εξής: η έμμεση ή η ρητή μετατροπή, οι τρέχουσες τοπικές ρυθμίσεις ημερομηνίας και ώρας, η στρογγυλοποίηση ή η περικοπή αριθμών και τα μεγέθη τύπων δεδομένων. Δεν υπάρχει υποκατάστατο για τις ενδελεχείς δοκιμές και την επιβεβαίωση των αποτελεσμάτων σας.
Στην Access, χρησιμοποιείτε μία από τις έντεκα συναρτήσεις μετατροπής τύπου, κάθε μία από τις οποίες ξεκινά με το γράμμα C κα αφορά έναν τύπο δεδομένων. Για παράδειγμα, για να μετατρέψετε έναν αριθμό κινητής υποδιαστολής σε συμβολοσειρά:
CStr(437.324) returns the string "437.324".
Στον SQL CAST και CONVERT, παρόλο που υπάρχουν και άλλες συναρτήσεις μετατροπής για εξειδικευμένες ανάγκες. Για παράδειγμα, για να μετατρέψετε έναν αριθμό κινητής υποδιαστολής σε συμβολοσειρά:
CONVERT(TEXT, 437.324) returns the string "437.324"
Συναρτήσεις DateAdd, DateDiff και DatePart
Αυτές οι συναρτήσεις ημερομηνίας που χρησιμοποιούνται συχνά είναι παρόμοιες (DateAdd, DateDiff και DatePart) στην Access και την TSQL, ωστόσο η χρήση του πρώτου ορίσματος διαφέρει.
-
Στην Access, το πρώτο όρισμα ονομάζεται διάστημακαι πρόκειται για μια παράσταση συμβολοσειράς που απαιτεί εισαγωγικά.
-
Στον SQL Server, το πρώτο όρισμα ονομάζεται τμήμα ημερομηνίας και χρησιμοποιεί τιμές λέξεων-κλειδιών που δεν απαιτούν εισαγωγικά.
Στοιχείο
Access
SQL Server
Έτος
"yyyy"
year, yy, yyyy
Τρίμηνο
"q"
quarter, qq, q
Μήνας
"m"
month, mm, m
Ημέρα του έτους
"y"
dayofyear, dy, y
Ημέρα
"d"
day, dd, d
Εβδομάδα
"ww"
wk, ww
Ημέρα της εβδομάδας
"w"
weekday, dw
Ώρα
"h"
hour, hh
Λεπτό
"n"
minute, mi, n
Δευτερόλεπτο
"s"
second, ss, s
Χιλιοστό του δευτερολέπτου
millisecond, ms
Σύγκριση συναρτήσεων
Τα ερωτήματα της Access μπορεί να περιέχουν υπολογιζόμενες στήλες που χρησιμοποιούν ορισμένες φορές συναρτήσεις της Access για την λήψη αποτελεσμάτων. Όταν κάνετε μετεγκατάσταση ερωτημάτων στον SQL Server, πρέπει να αντικαταστήσετε τη συνάρτηση της Access με μια ισοδύναμη συνάρτηση TSQL, εάν είναι διαθέσιμη κάποια. Εάν δεν υπάρχει αντίστοιχη συνάρτηση TSQL, συνήθως θα δημιουργήσετε μια υπολογιζόμενη στήλη για να κάνετε αυτό που θέλετε. Η TSQL διαθέτει μεγάλη ποικιλία συναρτήσεων και είναι προς όφελός σας να δείτε τι είναι διαθέσιμο. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Ποιες είναι οι συναρτήσεις βάσης δεδομένων SQL;.
Ο παρακάτω πίνακας δείχνει ποια συνάρτηση Access έχει μια αντίστοιχη συνάρτηση TSQL.
Κατηγορία της Access |
Συνάρτηση της Access |
Συνάρτηση TSQL |
Μετατροπή |
||
Μετατροπή |
||
Μετατροπή |
||
Μετατροπή |
||
Μετατροπή |
||
Μετατροπή |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Hμερομηνία/Ώρα |
||
Συγκεντρωτικά αποτελέσματα τομέα |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Μαθηματικές |
||
Ροή προγράμματος |
||
Ροή προγράμματος |
||
Στατιστικές |
||
Συγκεντρωτικές SQL |
||
Συγκεντρωτικές SQL |
||
Συγκεντρωτικές SQL |
||
Συγκεντρωτικές SQL |
||
Συγκεντρωτικές SQL |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |
||
Κείμενο |