Σύγκριση της SQL της Access με την TSQL του SQL Server

Ισχύει για
Access για Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Εάν μετεγκαταστήσετε τα δεδομένα της Access στο SQL Server ή δημιουργήσετε μια λύση της Access με SQL Server ως βάση δεδομένων παρασκηνίου, είναι ζωτικής σημασίας να γνωρίζετε τις διαφορές μεταξύ της SQL της Access και του SQL Server Transact SQL (TSQL). Ακολουθούν είναι οι σημαντικές παραλλαγές που πρέπει να γνωρίζετε ώστε η λύση σας να λειτουργεί σύμφωνα με τα προβλεπόμενα.

Για περισσότερες πληροφορίες, ανατρέξτε στα θέματα Sql της Access: βασικές έννοιες λεξιλογίου και σύνταξης και Αναφορά 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, χρησιμοποιήστε τη δήλωση Παραμέτρων SQL
@ParamName

Σημειώσεις

  • Η Access χρησιμοποιεί χαρακτήρες εισαγωγικών (") γύρω από τα ονόματα των πινάκων και τα αντικείμενα. Η T-SQL μπορεί να τα χρησιμοποιήσει για ονόματα πινάκων με κενά διαστήματα, αλλά αυτή δεν είναι η συνήθης πρακτική ονοματοδοσίας. Στις περισσότερες περιπτώσεις, τα ονόματα αντικειμένων θα πρέπει να μετονομαστούν χωρίς κενά διαστήματα, ωστόσο τα ερωτήματα πρέπει να συνταχθούν ξανά ώστε να απεικονίζουν τα ονόματα των νέων πινάκων. Χρησιμοποιήστε αγκύλες [] για πίνακες που δεν είναι δυνατό να μετονομαστούν αλλά που δεν συμμορφώνονται με τα πρότυπα ονοματοδοσίας. Η Access προσθέτει επίσης επιπλέον παρενθέσεις γύρω από τις παραμέτρους στα ερωτήματα, ωστόσο αυτές μπορούν να καταργηθούν στην T-SQL.

  • Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε την κανονική μορφή ημερομηνίας, εεεε-μμ-ηη ωω:λλ:δδ, που είναι ένα πρότυπο ODBC για ημερομηνίες που είναι αποθηκευμένες ως χαρακτήρες, το οποίο παρέχει έναν συνεπή τρόπο εμφάνισής τους σε όλες τις βάσεις δεδομένων και διατηρεί τη σειρά ταξινόμησης των ημερομηνιών.

  • Για να αποφύγετε τη σύγχυση κατά τη σύγκριση δυαδικών τιμών, μπορείτε να χρησιμοποιήσετε την ακόλουθη σύγκριση για την Access και τον SQL Server:

    • Έλεγχος για ψευδή τιμή 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 Server, χρησιμοποιείτε κυρίως τις συναρτήσεις CAST και CONVERT TSQL, παρόλο που υπάρχουν και άλλες συναρτήσεις μετατροπής για εξειδικευμένες ανάγκες. Για παράδειγμα, για να μετατρέψετε έναν αριθμό κινητής υποδιαστολής σε συμβολοσειρά:


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 που χρησιμοποιείται για μια υπολογιζόμενη στήλη) για να κάνετε αυτό που θέλετε. Το TSQL διαθέτει ένα ευρύ φάσμα συναρτήσεων και είναι προς όφελός σας να δείτε τι είναι διαθέσιμο. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Ποιες είναι οι συναρτήσεις βάσης δεδομένων SQL;.

Ο παρακάτω πίνακας δείχνει ποια συνάρτηση Access έχει μια αντίστοιχη συνάρτηση TSQL.

Κατηγορία της Access Συνάρτηση της Access Συνάρτηση TSQL
Μετατροπή Συνάρτηση Chr CHAR
Μετατροπή Συνάρτηση Day DAY
Μετατροπή Συνάρτηση FormatNumber ΜΟΡΦΉ
Μετατροπή Συνάρτηση FormatPercent ΜΟΡΦΉ
Μετατροπή Συνάρτηση Str STR
Μετατροπή Συναρτήσεις μετατροπής τύπου CAST και CONVERT
Ημερομηνία/ώρα Συνάρτηση Date CURRENT_TIMESTAMP
Ημερομηνία/ώρα Συνάρτηση Day DATEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση DateAdd DATEADD
Ημερομηνία/ώρα Συνάρτηση DateDiff DATEDIFF
DATEDIFF_BIG
Ημερομηνία/ώρα Συνάρτηση DatePart DATEPART
Ημερομηνία/ώρα Συνάρτηση DateSerial DATEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση DateValue DATENAME
Ημερομηνία/ώρα Συνάρτηση Hour TIMEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση Minute TIMEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση Month MONTH
Ημερομηνία/ώρα Συνάρτηση Now SYSDATETIME
Ημερομηνία/ώρα Συνάρτηση Second TIMEFROMPARTS
Συνάρτηση Time TIMEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση TimeSerial TIMEFROMPARTS
Ημερομηνία/ώρα Συνάρτηση Weekday DATEPART
DATENAME
Ημερομηνία/ώρα Συνάρτηση Year YEAR
DATEFROMPARTS
Συγκεντρωτικά αποτελέσματα τομέα Συναρτήσεις DFirst, DLast FIRST_VALUE
LAST_VALUE
Μαθηματικά Συνάρτηση Abs ABS
Μαθηματικά Συνάρτηση Atn ATAN
ATN2
Μαθηματικά Συνάρτηση Cos COS
ACOS
Μαθηματικά Συνάρτηση Exp EXP
Μαθηματικά Συναρτήσεις Int, Fix FLOOR
Μαθηματικά Συνάρτηση Log LOG
LOG10
Μαθηματικά Συνάρτηση Rnd RAND
Μαθηματικά Συνάρτηση Round ROUND
Μαθηματικά Συνάρτηση Sgn SIGN
Μαθηματικά Συνάρτηση Sin SIN
Μαθηματικά Συνάρτηση Sqr SQRT
Ροή προγράμματος Συνάρτηση Choose CHOOSE
Ροή προγράμματος Συνάρτηση IIf IIF
Στατιστικές Συνάρτηση Avg ΜΈΣΗ
Συγκεντρωτικές SQL Συνάρτηση Count COUNT
COUNT_BIG
Συγκεντρωτικές SQL Συναρτήσεις Min, Max MIN
MAX
Συγκεντρωτικές SQL Συναρτήσεις StDev, StDevP STDEV
STDEVP
Συγκεντρωτικές SQL Συνάρτηση Sum SUM
Συγκεντρωτικές SQL Συναρτήσεις Var, VarP VAR
VARP
Text Συνάρτηση Format ΜΟΡΦΉ
Text Συνάρτηση LCase LOWER
Text Συνάρτηση Left ΑΡΙΣΤΕΡΆ
Text Συνάρτηση Len LEN
Text Συναρτήσεις LTrim, RTrim και Trim TRIM
LTRIM
RTRIM
Text Συνάρτηση Replace ΑΝΤΙΚΑΤΑΣΤΉΣΕΙ
Text Συνάρτηση Right ΔΕΞΙΆ
Text Συνάρτηση StrReverse ΑΝΤΊΣΤΡΟΦΗ
Text Συνάρτηση UCase UPPER