So sánh Access SQL với SQL Server TSQL

Áp dụng cho
Access cho Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Nếu bạn di chuyển dữ liệu Access sang SQL Server hoặc tạo giải pháp Access bằng SQL Server dưới dạng cơ sở dữ liệu phụ trợ thì điều quan trọng là bạn biết sự khác biệt giữa Access SQL và SQL Server Transact SQL (TSQL). Dưới đây là các biến thể quan trọng bạn cần biết để giải pháp của bạn hoạt động như mong muốn.

Để biết thêm thông tin, hãy xem SQL trong Access: khái niệm cơ bản, từ vựng và cú phápvà Tham khảo Transact-SQL.

Những khác biệt về cú pháp và biểu thức

Có một số điểm khác biệt về cú pháp và biểu thức yêu cầu chuyển đổi. Bảng dưới đây liệt kê các tùy chọn phổ biến nhất.

Khác biệt Access SQL SQL Server TSQL
Thuộc tính cơ sở dữ liệu có quan hệ Thông thường được gọi là trường Thông thường được gọi là cột
Ký tự chuỗi Dấu ngoặc kép ("), chẳng hạn như "Mary Q. Contrary" Dấu nháy đơn ('), chẳng hạn như 'Mary Q. Contrary'
Ký tự ngày Dấu thăng (#), chẳng hạn như #01/01/2019# Dấu nháy đơn ('), chẳng hạn như '01/01/2019'
Nhiều ký tự đại diện Dấu sao (*), chẳng hạn như "Cath*" Dấu tỷ lệ phần trăm (%), chẳng hạn như 'Cath%'
Một ký tự đại diện Dấu chấm hỏi (?), chẳng hạn như "Cath?" Dấu gạch dưới (_), chẳng hạn như "Cath_"
Toán tử mô-đun Toán tử MOD, như Value1 MOD Value2 Tỷ lệ phần trăm (%), như Value1 % Value2
Các giá trị boolean KHI Bitvalue = [True | False]
Hoặc
KHI Bitvalue = [-1 | 0]
KHI Bitvalue = [1 | 0]
Tham số [<Một tên không phải là một cột được xác định>]
Hoặc
Trong dạng xem SQL, sử dụng Khai báo SQL Parameters
@ParamName

Ghi chú

  • Access sử dụng ký tự dấu ngoặc kép (") quanh tên bảng và đối tượng. T-SQL có thể sử dụng các tên bảng có chứa khoảng trắng nhưng đây không phải là cách đặt tên tiêu chuẩn. Trong hầu hết các trường hợp, tên đối tượng nên được đổi để không chứa khoảng trắng nhưng các truy vấn cũng phải được viết lại để phản ánh các tên bảng mới. Sử dụng dấu ngoặc vuông [ ] đối với các bảng không thể đổi tên nhưng không phù hợp với tiêu chuẩn đặt tên. Access cũng bổ sung thêm dấu ngoặc đơn xung quanh tham số trong truy vấn nhưng có thể loại bỏ dấu ngoặc đơn ctrong T-SQL.

  • Cân nhắc sử dụng định dạng ngày chính tắc, yyyy-mm-dd hh:nn:ss, là một tiêu chuẩn ODBC cho ngày tháng được lưu trữ dưới dạng ký tự để cung cấp một cách nhất quán để thể hiện thời gian trên nhiều cơ sở dữ liệu và giữ nguyên thứ tự sắp xếp ngày.

  • Để tránh nhầm lẫn khi so sánh các giá trị Boolean, bạn có thể sử dụng so sánh sau đây cho Access và SQL Server:

    • Kiểm tra giá trị false KHI Bitvalue = 0
    • Kiểm tra giá trị true WHERE Bitvalue <> 0

Giá trị null

Giá trị null không phải là trường trống có nghĩa là "không có giá trị nào cả". Giá trị null là chỗ dành sẵn vì chỗ dành sẵn có nghĩa là dữ liệu thiếu hoặc không xác định. Các hệ thống cơ sở dữ liệu nhận ra giá trị null sẽ triển khai "lô-gic ba giá trị", nghĩa là có thể đúng, sai hoặc không xác định. Nếu bạn không xử lý đúng các giá trị null, bạn có thể nhận được kết quả không chính xác khi thực hiện so sánh bình đẳng hoặc đánh giá các mệnh đề WHERE. Đây là một so sánh cách xử lý các giá trị null của Access và SQL Server.

Tắt các giá trị null trong bảng

trong Access và SQL Server, trải nghiệm mặc định là bật các giá trị null. Để tắt các giá trị null trong cột bảng, hãy thực hiện các thao tác sau:

  • Trong Access, hãy đặt thuộc tính Bắt buộc của trường thành Yes.
  • Trong SQL Server, hãy thêm thuộc tính NOT NULL vào cột trong một câu lệnh TẠO BẢNG.

Thử nghiệm các giá trị null trong một mệnh đề WHERE

Sử dụng vị từ so sánh IS NULL và IS NOT NULL:

  • Trong Access, sử dụng IS NULL hoặc IS NOT NULL. Ví dụ:

    SELECT … WHERE column IS NULL.
    
  • Trong SQL Server, sử dụng IS NULL hoặc IS NOT NULL. Ví dụ:

    SELECT … WHERE field IS NULL
    

Chuyển đổi các giá trị null bằng hàm

Sử dụng các hàm null để bảo vệ biểu thức và trả về các giá trị thay thế:

  • Trong Access, hãy sử dụng hàm NZ (value, [valueifnull]) để trả về 0 hoặc một giá trị khác. Ví dụ:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
    
  • Trong SQL Server, hãy sử dụng hàm ISNULL(Value, replacement_value) để trả về 0 hoặc một giá trị khác. Ví dụ:

    SELECT AVG (ISNULL (Weight, 50)) FROM Product
    

Hiểu các tùy chọn cơ sở dữ liệu

Một số hệ thống cơ sở dữ liệu có cơ chế sở hữu:

  • Trong Access, bạn không có tùy chọn cơ sở dữ liệu nào liên quan đến Null.
  • Trong SQL Server bạn có thể sử dụng tùy chọn SET ANSI_NULLS OFF để so sánh bình đẳng trực tiếp với NULL bằng cách sử dụng các toán tử = <> và. Bạn nên tránh việc dùng tùy chọn này vì tùy chọn này đã lỗi thời và có thể gây nhầm lẫn cho những người dựa vào việc xử lý null theo chuẩn ISO.

Chuyển đổi và truyền

Bất cứ khi nào bạn đang làm việc với dữ liệu hoặc lập trình, chắc chắn sẽ có nhu cầu chuyển đổi từ một kiểu dữ liệu này sang kiểu khác. Quá trình chuyển đổi có thể đơn giản hoặc phức tạp. Các sự cố phổ biến mà bạn cần cân nhắc là: việc chuyển đổi tiềm ẩn hoặc rõ ràng, các thiết đặt khu vực ngày và giờ hiện tại, làm tròn hoặc cắt bớt số và kích cỡ kiểu dữ liệu. Không có cách nào thay thế cho việc kiểm tra kỹ lưỡng và xác nhận kết quả của bạn.

Trong Access, bạn sử dụng Các hàm chuyển đổi kiểu, trong đó có mười một hàm, các hàm đều bắt đầu bằng chữ cái C, mỗi hàm cho một kiểu dữ liệu. Ví dụ: Để chuyển đổi số chứa dấu chấm động vào một chuỗi:


CStr(437.324) returns the string "437.324".

Trong SQL Server, bạn chủ yếu sử dụng hàm CAST và CONVERT TSQL, mặc dù có các Hàm Chuyển đổi khác cho các nhu cầu chuyên biệt. Ví dụ: Để chuyển đổi số chứa dấu chấm động vào một chuỗi:


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

Hàm DateAdd, DateDiff và DatePart

Những hàm ngày tháng được sử dụng thường xuyên này đều giống nhau (DateAdd, DateDiff và DatePart) trong Access và TSQL nhưng việc sử dụng tham đối đầu tiên có sự khác biệt.

  • Trong Access, tham đối đầu tiên được gọi là interval và đó là một biểu thức chuỗi yêu cầu có dấu ngoặc kép.

  • Trong SQL Server, tham đối đầu tiên được gọi là datepart và sử dụng các giá trị từ khóa không yêu cầu dấu ngoặc kép.

    Cấu phần Access SQL Server
    Năm "yyyy" year, yy, yyyy
    Quý "q" quarter, qq, q
    Tháng "m" month, mm, m
    Ngày trong năm "y" dayofyear, dy, y
    Ngày "d" day, dd, d
    Tuần "ww" wk, ww
    Ngày trong tuần "w" weekday, dw
    Giờ "h" hour, hh
    Phút "n" minute, mi, n
    Giây "s" second, ss, s
    Millisecond millisecond, ms

So sánh các hàm

Truy vấn Access có thể chứa các cột tính toán để đôi khi sử dụng cácHàm Access để thu được kết quả. Khi bạn di chuyển các truy vấn sang SQL Server, bạn cần thay thế hàm Access bằng một hàm TSQL tương đương (nếu có). Nếu không có hàm TSQL tương ứng thì bạn thường có thể tạo cột được tính toán ( thuật ngữ TSQL dùng cho cột được tính toán) để làm những gì bạn muốn. TSQL có rất nhiều hàm và bạn có thể tận dụng lợi ích của mình để xem những hàm sẵn dùng. Để biết thêm thông tin, hãy xem mục Các hàm cơ sở dữ liệu SQL là gì?.

Bảng sau đây hiển thị hàm nào của Access có hàm TSQL tương ứng.

Danh mục Access Hàm Access Hàm TSQL
Chuyển đổi Hàm Chr CHAR
Chuyển đổi Hàm Day DAY
Chuyển đổi Hàm FormatNumber ĐỊNH DẠNG
Chuyển đổi Hàm FormatPercent ĐỊNH DẠNG
Chuyển đổi Hàm Str STR
Chuyển đổi Các hàm chuyển đổi kiểu CAST và CONVERT
Ngày/Giờ Hàm Date CURRENT_TIMESTAMP
Ngày/Giờ Hàm Day DATEFROMPARTS
Ngày/Giờ Hàm DateAdd DATEADD
Ngày/Giờ Hàm DateDiff DATEDIFF
DATEDIFF_BIG
Ngày/Giờ Hàm DatePart DATEPART
Ngày/Giờ Hàm DateSerial DATEFROMPARTS
Ngày/Giờ Hàm DateValue DATENAME
Ngày/Giờ Hàm Hour TIMEFROMPARTS
Ngày/Giờ Hàm Minute TIMEFROMPARTS
Ngày/Giờ Hàm Month MONTH
Ngày/Giờ Hàm Now THỜI GIAN SYSDATETIME
Ngày/Giờ Hàm Second TIMEFROMPARTS
Hàm Time TIMEFROMPARTS
Ngày/Giờ Hàm TimeSerial TIMEFROMPARTS
Ngày/Giờ Hàm Weekday DATEPART
DATENAME
Ngày/Giờ Hàm Year YEAR
DATEFROMPARTS
Tổng hợp miền Các hàm DFirst, DLast FIRST_VALUE
LAST_VALUE
Toán học Hàm Abs ABS
Toán học Hàm Atn ATAN
ATN2
Toán học Hàm Cos COS
ACOS
Toán học Hàm Exp EXP
Toán học Các hàm Int, Fix FLOOR
Toán học Hàm Log LOG
LOG10
Toán học Hàm Rnd RAND
Toán học Hàm Round ROUND
Toán học Hàm Sgn SIGN
Toán học Hàm Sin SIN
Toán học Hàm Sqr SQRT
Dòng chương trình Hàm Choose CHOOSE
Dòng chương trình Hàm IIf IIF
Thống kê Hàm Avg AVG
SQL Aggregate Hàm Count COUNT
COUNT_BIG
SQL Aggregate Các hàm Min, Max MIN
MAX
SQL Aggregate Các hàm StDev, StDevP STDEV
STDEVP
SQL Aggregate Hàm Sum Hàm SUM
SQL Aggregate Các hàm Var, VarP VAR
VARP
Văn bản Hàm Format ĐỊNH DẠNG
Văn bản Hàm LCase LOWER
Văn bản Hàm Left TRÁI
Văn bản Hàm Len LEN
Văn bản Các hàm LTrim, RTrim và Trim TRIM
LTRIM
RTRIM
Văn bản Hàm Replace THAY THẾ
Văn bản Hàm Right BÊN PHẢI
Văn bản Hàm StrReverse ĐẢO NGƯỢC
Văn bản Hàm UCase UPPER