Jika akan memigrasikan data Access ke SQL Server atau membuat solusi Access dengan SQL Server sebagai database ujung belakang, Anda perlu mengetahui perbedaan antara Access SQL dan SQL Server Transact SQL (TSQL). Berikut adalah beberapa variasi penting yang perlu diketahui agar solusi Anda dapat berfungsi sebagaimana mestinya.
Untuk informasi selengkapnya, lihat Access SQL: konsep dasar, kosakata, dan sintaks serta Referensi Transact-SQL.
Perbedaan sintaksis dan ekspresi
Ada beberapa perbedaan sintaksis dan ekspresi yang memerlukan pengubahan. Tabel berikut ini merangkum perbedaan yang paling umum.
Perbedaan |
Access SQL |
SQL Server TSQL |
Atribut database relasional |
Biasanya disebut bidang |
Biasanya disebut kolom |
Terbaca sebagai string |
Tanda petik ("), seperti "Mary Q. Contrary" |
Tanda petik tunggal (‘), seperti ‘Mary Q. Contrary’ |
Terbaca sebagai tanggal |
Tanda pagar (#), seperti #1/1/2019# |
Tanda petik tunggal ('), seperti '1/1/2019' |
Beberapa karakter wildcard |
Tanda bintang (*), seperti "Cath*" |
Persen (%), seperti 'Cath%' |
Satu karakter wildcard |
Tanda Tanya (?), seperti "Cath?" |
Garis bawah (_), seperti "Cath_" |
Operator modulo |
Operator MOD, seperti Nilai1 MOD Nilai2 |
Persen (%), seperti Nilai1 % Nilai2 |
Nilai Boolean |
WHERE Bitvalue = [True | False] Atau WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Parameter |
[<Nama yang bukan merupakan kolom yang ditentukan>] Atau Dalam tampilan SQL, gunakan Deklarasi Parameter SQL |
@NamaParam |
Catatan
-
Access menggunakan karakter tanda petik (") di sekitar objek dan nama tabel. T-SQL dapat menggunakannya untuk nama tabel dengan spasi, tetapi hal ini bukanlah praktik penamaan standar. Biasanya, nama objek harus diubah tanpa spasi, tetapi kueri juga harus ditulis ulang untuk menunjukkan nama tabel baru. Gunakan kurung siku [ ] untuk tabel yang tidak dapat diganti namanya tetapi tidak sesuai dengan standar penamaan. Access juga menambahkan tanda kurung tambahan di sekitar parameter dalam kueri, tetapi tanda ini dapat dihapus di T-SQL.
-
Pertimbangkan untuk menggunakan format tanggal kanonis, tttt-bb-hh jj:mm:dd, yang merupakan standar ODBC untuk tanggal yang disimpan sebagai karakter, yang menyediakan cara konsisten untuk menampilkannya di seluruh database dan mempertahankan urutan tanggal.
-
Agar tidak bingung ketika membandingkan nilai Boolean, Anda dapat menggunakan perbandingan berikut ini untuk Access dan SQL Server:
-
Percobaan untuk nilai salah WHERE Bitvalue = 0
-
Percobaan untuk nilai benar WHERE Bitvalue <> 0
-
Nilai null
Nilai null bukanlah bidang kosong yang berarti “tidak ada nilai sama sekali”. Nilai null adalah tempat penampung yang berarti data tidak ditemukan atau tidak diketahui. Sistem database yang mengenali nilai null menerapkan “logika tiga nilai”, yang berarti sesuatu dapat bernilai benar, salah, atau tidak diketahui. Jika tidak menangani nilai null dengan benar, Anda mungkin mendapatkan hasil yang salah ketika membuat perbandingan persamaan atau mengevaluasi klausa WHERE. Berikut adalah perbandingan tentang bagaimana Access dan SQL Server menangani nilai null.
Menonaktifkan nilai null dalam tabel
Di Access dan SQL Server, nilai null diaktifkan secara default. Untuk menonaktifkan nilai null dalam kolom tabel, lakukan hal berikut:
-
Di Access, atur properti Diperlukan pada bidang ke Ya.
-
Di SQL Server, tambahkan atribut NOT NULL ke kolom dalam pernyataan CREATE TABLE.
Percobaan untuk nilai null dalam klausa WHERE
Gunakan predikat perbandingan NULL dan IS NOT NULL:
-
Di Access, gunakan IS NULL atau IS NOT NULL. Misalnya:
SELECT … WHERE column IS NULL.
-
Di SQL Server, gunakan IS NULL atau IS NOT NULL. Misalnya:
SELECT … WHERE field IS NULL
Mengonversi nilai null dengan fungsi
Gunakan fungsi null untuk melindungi ekspresi dan mengembalikan nilai alternatif:
-
Di Access, gunakan fungsi NZ (nilai, [nilaijikanull]) yang akan mengembalikan 0 atau nilai lainnya. Misalnya:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
Di SQL Server, gunakan fungsi ISNULL (Nilai, nilai_pengganti) yang akan mengembalikan 0 atau nilai lainnya. Misalnya:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Memahami opsi Database
Beberapa sistem database memiliki mekanisme kepemilikan:
-
Di Access, tidak ada opsi database yang terkait dengan Null.
-
Di SQL Server, Anda dapat menggunakan opsi SET ANSI_NULLS OFF untuk perbandingan persamaan langsung dengan NULL menggunakan operator = dan <>. Sebaiknya hindari penggunaan opsi ini karena sudah dihentikan dan dapat membingungkan orang lain yang mengandalkan penanganan null yang mematuhi standar ISO.
Konversi dan pengubahan
Setiap kali bekerja dengan data atau melakukan pemrograman, Anda selalu perlu mengonversi data dari satu tipe ke yang lainnya. Proses konversi dapat menjadi mudah atau rumit. Masalah umum yang perlu Anda pikirkan adalah: konversi implisit atau eksplisit, pengaturan kawasan untuk tanggal dan waktu saat ini, pembulatan atau pemotongan angka, dan ukuran tipe data. Tidak ada pengganti untuk pengujian menyeluruh dan konfirmasi hasil.
Di Access, Anda menggunakan Fungsi Konversi Tipe, yang berjumlah sebelas, masing-masing dimulai dengan huruf C, satu fungsi untuk setiap tipe data. Misalnya, untuk mengonversi bilangan poin mengambang menjadi string:
CStr(437.324) returns the string "437.324".
Di SQL Server, Anda biasanya menggunakan fungsi TSQL CAST dan CONVERT, meskipun ada Fungsi Konversi lainnya untuk kebutuhan tertentu. Misalnya, untuk mengonversi bilangan poin mengambang menjadi string:
CONVERT(TEXT, 437.324) returns the string "437.324"
Fungsi DateAdd, DateDiff, dan DatePart
Fungsi tanggal yang sering digunakan ini hampir sama (DateAdd, DateDiff, dan DatePart) di Access maupun di TSQL, tetapi penggunaan argumen pertamanya berbeda.
-
Di Access, argumen pertama disebut interval, dan merupakan ekspresi string yang memerlukan tanda petik.
-
Di SQL Server, argumen pertama disebut datepart dan menggunakan nilai kata kunci yang tidak memerlukan tanda petik.
Komponen
Access
SQL Server
Tahun
"yyyy"
year, yy, yyyy
Kuartal
"q"
quarter, qq, q
Bulan
"m"
month, mm, m
Hari dalam Tahun
"y"
dayofyear, dy, y
Hari
"d"
day, dd, d
Minggu
"ww"
wk, ww
Hari dalam Minggu
"w"
weekday, dw
Jam
"h"
hour, hh
Menit
"n"
minute, mi, n
Detik
"s"
second, ss, s
Milidetik
millisecond, ms
Perbandingan fungsi
Kueri Access dapat berisi kolom terhitung yang terkadang menggunakan Fungsi Access untuk mendapatkan hasil. Saat memigrasikan kueri ke SQL Server, Anda perlu mengganti fungsi Access dengan fungsi TSQL yang setara jika tersedia. Jika tidak ada fungsi TSQL yang terkait, Anda biasanya dapat membuat kolom terkomputasi (Istilah TSQL yang digunakan untuk kolom terhitung) untuk melakukan yang Anda inginkan. TSQL memiliki berbagai macam fungsi, dan Anda sebaiknya mengetahui fungsi-fungsi yang tersedia. Untuk informasi selengkapnya, lihat Apa saja fungsi database SQL?.
Tabel berikut ini memperlihatkan fungsi Access yang mempunyai fungsi TSQL terkait.
Kategori Access |
Fungsi Access |
Fungsi TSQL |
Konversi |
||
Konversi |
||
Konversi |
||
Konversi |
||
Konversi |
||
Konversi |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Tanggal/Waktu |
||
Agregat Domain |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Matematika |
||
Alur Program |
||
Alur Program |
||
Statistik |
||
Agregat SQL |
||
Agregat SQL |
||
Agregat SQL |
||
Agregat SQL |
||
Agregat SQL |
||
Teks |
||
Teks |
||
Teks |
||
Teks |
||
Teks |
||
Teks |
||
Teks |
||
Teks |
||
Teks |