หากคุณย้ายข้อมูล Access ของคุณไปยัง SQL Server หรือคุณสร้างโซลูชัน Access ด้วย SQL Server เป็นฐานข้อมูลส่วนหลัง คุณต้องทราบความแตกต่างระหว่าง Access SQL และ SQL Server Transact SQL (TSQL) ต่อไปนี้เป็นชุดรูปแบบสำคัญที่คุณต้องทราบเพื่อให้โซลูชันของคุณได้ผลตามที่ต้องการ
สําหรับข้อมูลเพิ่มเติม ให้ดู Access SQL: แนวคิดพื้นฐาน คําศัพท์ และไวยากรณ์ และ การอ้างอิง Transact-SQL
ความแตกต่างระหว่างไวยากรณ์และนิพจน์
ไวยากรณ์และนิพจน์มีความแตกต่างบางประการที่ต้องมีการแปลง ตารางต่อไปนี้สรุปความแตกต่างที่พบบ่อยที่สุด
| ความแตกต่าง | 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 ให้คุณใช้ฟังก์ชัน CAST และ CONVERT TSQL เป็นหลัก แม้ว่าจะมีฟังก์ชันการแปลงอื่นๆ สําหรับความต้องการแบบพิเศษ ตัวอย่างเช่น เมื่อต้องการแปลงหมายเลขจุดลอยตัวเป็นสตริง:
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 ที่ตรงกัน