Nếu bạn di chuyển dữ liệu Access của mình sang SQL Server hoặc tạo một giải pháp Access bằng SQL Server dưới dạng cơ sở dữ liệu đầu cuối, điều quan trọng là bạn biết những điều 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ố |
[<Tên A không phải là một cột được xác định>] Hoặc Trong SQL View, hãy 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 KHI Bitvalue <> 0
-
Giá trị null
Một giá trị null không phải là trường trống vì 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 sẽ nhận ra các giá trị null sẽ triển khai "lô-gic ba giá trị": True, False hoặc Unknown. Nếu bạn không xử lý các giá trị null chính xác, bạn có thể nhận được những 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 Máy chủ SQL, 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 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 khá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 sẽ sử dụng chủ yếu là các hàm TSQL CAST and CONVERT (TRUYỀN và CHUYỂN ĐỔI) mặc dù có những Hàm Chuyển đổi đáp ứng được những nhu cầu đặc 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 thứ nhất đượ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 mà không yêu cầu có 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 tính toán (Thuật ngữ TSQL dùng cho cột tính toán) để thực hiện những thao tác bạn muốn. TSQL có nhiều hàm cho bạn thoải mái lựa chọn. Để biết thêm thông tin, hãy xem mục Các hàm của 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 |
||
Chuyển đổi |
||
Chuyển đổi |
||
Chuyển đổi |
||
Chuyển đổi |
||
Chuyển đổi |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Ngày/Giờ |
||
Tổng hợp miền |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Toán học |
||
Dòng chương trình |
||
Dòng chương trình |
||
Thống kê |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
SQL Aggregate |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |
||
Văn bản |