หากคุณย้ายข้อมูล Access ไปยัง SQL Server หรือคุณสร้างโซลูชัน Access ด้วย SQL Server เป็นฐานข้อมูลส่วนหลัง คุณต้องทราบความแตกต่างระหว่าง Access SQL และ SQL Server Transact SQL (TSQL) ต่อไปนี้เป็นชุดรูปแบบสำคัญที่คุณต้องทราบเพื่อให้โซลูชันของคุณได้ผลตามที่ต้องการ
สำหรับข้อมูลเพิ่มเติม ให้ดู Access SQL: แนวคิดพื้นฐาน คำศัพท์ และไวยากรณ์ และ Transact-SQL Reference
ความแตกต่างระหว่างไวยากรณ์และนิพจน์
ไวยากรณ์และนิพจน์มีความแตกต่างบางประการที่ต้องมีการแปลง ตารางต่อไปนี้สรุปความแตกต่างที่พบบ่อยที่สุด
ความแตกต่าง |
Access SQL: |
SQL Server TSQL |
แอตทริบิวต์ฐานข้อมูลเชิงสัมพันธ์ |
โดยปกติเรียกว่าเขตข้อมูล |
โดยปกติเรียกว่าคอลัมน์ |
สัญพจน์สตริง |
เครื่องหมายคำพูด (") เช่น "Mary Q. Contrary" |
อัญประกาศเดี่ยว (') เช่น 'Mary Q. Contrary' |
สัญพจน์วันที่ |
เครื่องหมายสี่เหลี่ยม (#) เช่น #1/1/2019# |
อัญประกาศเดี่ยว (') เช่น '1/1/2019' |
หลายอักขระตัวแทน |
เครื่องหมายดอกจัน (*) เช่น "Cath*" |
เปอร์เซ็นต์ (%) เช่น 'Cath%' |
อักขระตัวแทนเดี่ยว |
เครื่องหมายคำถาม (?) เช่น "Cath?" |
ขีดล่าง (_) เช่น "Cath_" |
ตัวดำเนินการมอดุโล |
ตัวดำเนินการ MOD เช่น Value1 MOD Value2 |
เปอร์เซ็นต์ (%) เช่น Value1 % Value2 |
ค่าบูลีน |
WHERE Bitvalue = [จริง | เท็จ] หรือ WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
พารามิเตอร์ |
[<ชื่อที่ไม่ใช่คอลัมน์ที่กำหนด>] หรือ ในมุมมอง SQL ใช้การประกาศพารามิเตอร์ SQL |
@ParamName |
หมายเหตุ
-
Access ใช้อักขระเครื่องหมายคำพูด (") รอบชื่อตารางและวัตถุ T-SQL สามารถใช้ชื่อตารางที่มีช่องว่างได้ แต่นี่ไม่ใช่วิธีการตั้งชื่อมาตรฐาน ในกรณีส่วนใหญ่ ชื่อวัตถุควรเปลี่ยนใหม่ไม่ให้มีช่องว่าง แต่คิวรีก็ต้องเขียนใหม่เพื่อให้สะท้อนตามชื่อตารางใหม่เช่นกัน ใช้วงเล็บเหลี่ยม [] สำหรับตารางที่ไม่สามารถเปลี่ยนชื่อได้แต่ไม่เป็นไปตามมาตรฐานการตั้งชื่อ นอกจากนี้ X ยังเพิ่มวงเล็บพิเศษรอบพารามิเตอร์ในคิวรีอีกด้วย แต่สามารถนำออกได้ใน T-SQL
-
พิจารณาใช้รูปแบบวันที่มาตรฐาน yyyy-mm-dd hh:nn:ss ซึ่งเป็นมาตรฐาน ODBC สำหรับวันที่ที่จัดเก็บเป็นอักขระที่แสดงถึงวันที่ในฐานข้อมูลต่างๆ อย่างสอดคล้องกันและรักษาลำดับการเรียงวันที่
-
เพื่อไม่ให้สับสนเมื่อเปรียบเทียบค่าบูลีน คุณสามารถใช้การเปรียบเทียบต่อไปนี้สำหรับ Access และ SQL Server:
-
ทดสอบหาค่าเท็จ WHERE Bitvalue = 0
-
ทดสอบหาค่าจริง 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 (value, [valueifnull]) ซึ่งส่งคืนค่า 0 หรือค่าอื่น ตัวอย่าง:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
ใน SQL Server ให้ใช้ฟังก์ชัน ISNULL(value, replacement_value) ซึ่งส่งคืนค่า 0 หรือค่าอื่น ตัวอย่าง:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
เข้าใจตัวเลือกฐานข้อมูล
บางระบบฐานข้อมูลจะมีกลไกที่เป็นกรรมสิทธิ์:
-
ใน Access จะไม่มีตัวเลือกฐานข้อมูลที่เกี่ยวข้องกับ Null
-
ใน SQL Server คุณสามารถใช้ตัวเลือก SET ANSI_NULLS OFF สำหรับการเปรียบเทียบความเท่ากันโดยตรงกับ NULL โดยใช้ตัวดำเนินการ = และ <> เราขอแนะนำให้คุณหลีกเลี่ยงการใช้ตัวเลือกนี้เพราะไม่ได้รับการสนับสนุน และอาจทำให้ผู้อื่นสับสนที่ต้องพึ่งพาการจัดการแบบ Null ตามมาตรฐาน ISO
การแปลง
เมื่อใดก็ตามที่คุณทำงานกับข้อมูลหรือการเขียนโปรแกรม คุณจำเป็นต้องแปลงจากข้อมูลชนิดหนึ่งไปเป็นอีกชนิดหนึ่งอย่างต่อเนื่อง กระบวนการแปลงอาจง่ายดายหรือซับซ้อนก็ได้ ปัญหาทั่วไปที่คุณต้องพิจารณาคือ: การแปลงโดยปริยายหรือชัดแจ้ง การตั้งค่าภูมิภาควันที่และเวลาปัจจุบัน การปัดเศษหรือตัดทอนตัวเลข และขนาดชนิดข้อมูล ไม่มีอะไรที่จะมาทดแทนการทดสอบโดยละเอียดและการยืนยันผลลัพธ์ของคุณได้
ใน Accessให้คุณใช้ ฟังก์ชันการแปลงชนิด ซึ่งมีสิบเอ็ดตัว แต่ละตัวเริ่มต้นด้วยตัวอักษร C โดยหนึ่งตัวสำหรับแต่ละชนิดข้อมูล ตัวอย่างเช่น เมื่อต้องการแปลงหมายเลขจุดลอยตัวเป็นสตริง:
CStr(437.324) returns the string "437.324".
ใน SQL Server ให้คุณใช้ฟังก์ชัน TSQL CAST and CONVERT เป็นหลัก แม้ว่าจะมี ฟังก์ชันการแปลง อื่นๆ สำหรับความต้องการแบบพิเศษ ตัวอย่างเช่น เมื่อต้องการแปลงหมายเลขจุดลอยตัวเป็นสตริง:
CONVERT(TEXT, 437.324) returns the string "437.324"
ฟังก์ชัน DateAdd, DateDiff และ DatePart
ฟังก์ชันวันที่ที่ใช้กันทั่วไปเหล่านี้มีความคล้ายคลึงกัน (DateAdd, DateDiff และ DatePart) ใน Access และ TSQL แต่การใช้อาร์กิวเมนต์แรกนั้นแตกต่างกัน
-
ใน Access อาร์กิวเมนต์แรกเรียกว่า interval และเป็นนิพจน์สตริงที่ต้องมีเครื่องหมายคำพูด
-
ใน SQL Server อาร์กิวเมนต์แรกเรียกว่า datepart และจะใช้ค่าคำสำคัญที่ไม่ต้องมีเครื่องหมายคำพูด
คอมโพเนนต์
Access
SQL Server
ปี
"yyyy"
ปี, yy, yyyy
ไตรมาส
"q"
ไตรมาส, qq, q
เดือน
"m"
เดือน, mm, m
วันของปี
"y"
วันของปี, dy, y
วัน
"d"
วัน, dd, d
สัปดาห์
"ww"
wk, ww
วันของสัปดาห์
"w"
วันทำงาน, dw
ชั่วโมง
"h"
ชั่วโมง, hh
นาที
"n"
นาที, mi, n
วินาที
"s"
วินาที, ss, s
มิลลิวินาที
มิลลิวินาที, ms
การเปรียบเทียบฟังก์ชัน
คิวรี Access สามารถมีคอลัมน์ที่คำนวณแล้วซึ่งบางครั้งใช้ ฟังก์ชัน Access เพื่อให้ได้ผลลัพธ์ เมื่อคุณโยกย้ายคิวรีไปยัง SQL Server คุณต้องแทนที่ฟังก์ชัน Access ด้วยฟังก์ชัน TSQL ที่เทียบเท่ากันหากมีอยู่ ถ้าไม่มีฟังก์ชัน TSQL ที่ตรงกัน โดยปกติคุณก็สามารถ สร้างคอลัมน์ที่คำนวณได้ (คำ TSQL ที่ใช้สำหรับคอลัมน์ที่คำนวณแล้ว) เพื่อทำสิ่งที่คุณต้องการ TSQL มีฟังก์ชันมากมายและเป็นประโยชน์ให้คุณได้ดูว่ามีอะไรบ้าง สำหรับข้อมูลเพิ่มเติมโปรดดู ฟังก์ชันฐานข้อมูล SQL คืออะไร
ตารางต่อไปนี้แสดงฟังก์ชัน Access ที่มีฟังก์ชัน TSQL ที่ตรงกัน
ประเภท Access |
ฟังก์ชัน Access |
ฟังก์ชัน TSQL |
การแปลง |
||
การแปลง |
||
การแปลง |
||
การแปลง |
||
การแปลง |
||
การแปลง |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
วันที่/เวลา |
||
การรวมโดเมน |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
คณิตศาสตร์ |
||
Program Flow |
||
Program Flow |
||
ทางสถิติ |
||
การรวม SQL |
||
การรวม SQL |
||
การรวม SQL |
||
การรวม SQL |
||
การรวม SQL |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |
||
ข้อความ |