เปรียบเทียบ Access SQL กับ SQL Server TSQL

นำไปใช้กับ
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

ถ้าคุณโยกย้ายข้อมูล 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 ส่วนใหญ่คุณใช้ฟังก์ชัน CAST และ CONVERT TSQL แม้ว่าจะมีฟังก์ชันการแปลงอื่นๆ สําหรับความต้องการเฉพาะ ตัวอย่างเช่น เมื่อต้องการแปลงหมายเลขจุดลอยตัวเป็นสตริง:


CONVERT(TEXT, 437.324) returns the string "437.324"

ฟังก์ชัน DateAdd, DateDiff และ DatePart

ฟังก์ชันวันที่ที่ใช้กันทั่วไปเหล่านี้มีความคล้ายคลึงกัน (DateAdd, DateDiff และ DatePart) ใน Access และ TSQL แต่การใช้อาร์กิวเมนต์แรกนั้นแตกต่างกัน

  • ใน Access อาร์กิวเมนต์แรกเรียกว่า ช่วงเวลา และเป็นนิพจน์สตริงที่ต้องมีเครื่องหมายอัญประกาศ

  • ใน 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
การแปลง ฟังก์ชัน Chr CHAR
การแปลง ฟังก์ชัน Day วัน
การแปลง ฟังก์ชัน FormatNumber รูป แบบ
การแปลง ฟังก์ชัน FormatPercent รูป แบบ
การแปลง ฟังก์ชัน Str Str
การแปลง ฟังก์ชัน Type Conversion แคสต์และแปลง
วัน/เวลา ฟังก์ชัน Date CURRENT_TIMESTAMP
วัน/เวลา ฟังก์ชัน Day DATEFROMPARTS
วัน/เวลา ฟังก์ชัน DateAdd DATEADD
วัน/เวลา ฟังก์ชัน DateDiff DATEDIFF
DATEDIFF_BIG
วัน/เวลา ฟังก์ชัน DatePart DATEPART
วัน/เวลา ฟังก์ชัน DateSerial DATEFROMPARTS
วัน/เวลา ฟังก์ชัน DateValue DATENAME
วัน/เวลา ฟังก์ชัน Hour TIMEFROMPARTS
วัน/เวลา ฟังก์ชัน Minute TIMEFROMPARTS
วัน/เวลา ฟังก์ชัน Month เดือน
วัน/เวลา ฟังก์ชัน Now SYSDATETIME
วัน/เวลา ฟังก์ชัน Second TIMEFROMPARTS
ฟังก์ชัน Time TIMEFROMPARTS
วัน/เวลา ฟังก์ชัน TimeSerial TIMEFROMPARTS
วัน/เวลา ฟังก์ชัน Weekday DATEPART
DATENAME
วัน/เวลา ฟังก์ชัน 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
Program Flow ฟังก์ชัน Choose CHOOSE
Program Flow ฟังก์ชัน 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
ข้อความ ฟังก์ชัน Format รูป แบบ
ข้อความ ฟังก์ชัน LCase LOWER
ข้อความ ฟังก์ชัน Left ซ้าย
ข้อความ ฟังก์ชัน Len LEN
ข้อความ ฟังก์ชัน LTrim, RTrim และ Trim TRIM
LTRIM
RTRIM
ข้อความ ฟังก์ชัน Replace แทน
ข้อความ ฟังก์ชัน Right ขวา
ข้อความ ฟังก์ชัน StrReverse ย้อน กลับ
ข้อความ ฟังก์ชัน UCase UPPER