- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
Temp Table SQL Server - Bảng tạm trong SQL Server
Sẽ rất có lợi khi lưu trữ dữ liệu trong các bảng tạm thời của SQL Server thay vì thao tác hoặc làm việc với các bảng cố định.
Khi bạn muốn có đầy đủ quyền truy cập vào các bảng trong Database, nhưng bạn lại không có. Bạn có thể sử dụng quyền truy cập đọc hiện có của mình để kéo dữ liệu vào bảng tạm thời của SQL-Server và thực hiện các điều chỉnh từ đó.
Hoặc bạn không có quyền để tạo bảng trong cơ sở dữ liệu hiện có, bạn có thể tạo bảng tạm thời SQL Server mà bạn có thể thao tác.
Cuối cùng, bạn có thể rơi vào tình huống chỉ cần hiển thị dữ liệu trong phiên hiện tại, và muốn update insert data trước khi hiển thị.
Bảng tạm chính là giải pháp mà bạn cần để xài !
- Vậy bảng tạm trong SQL server là gì ?
Bảng tạm là các có cấu trúc và chức năng như một bảng cố định bình thường trong SQL Server. Nhưng thay vì tạo ra một bảng trong Database, bảng tạm được tạo ra và lưu trữ trong tempdb. Chúng ta thường tạo bảng tạm trong một câu truy vấn, trong xử lý của một procedure hoặc trong một function (chỉ sử dụng được biến kiểu bảng). (Nguồn)
Có 2 loại bảng tạm đó là #tenbang1 và ##tenbang2. Với bảng chỉ có một tiền tố #, bảng này sẽ được tạo và truy vấn sử dụng cục bộ, tức là username nào tạo ra thì chỉ có user đó được xài. Vậy với bảng có tiền tố là ## thì một user tạo ra, những user khác cũng có thể truy cập đến và thao tác.
Đến đây chắc có bạn sẽ hỏi là: Nó khác gì so với bảng cố định ? Câu trả lời là nó sẽ biến mất khi user tạo ra nó kết thúc phiên đăng nhập. (tham khảo tại đây).
- Sử dụng bảng tạm. Cú pháp :
--Create temp table
CREATE TABLE #TempTable1
(
ID INT IDENTITY PRIMARY KEY NOT NULL,
Name VARCHAR(10) NOT NULL,
DOB DATETIME null
)
GO
CREATE TABLE ##TempTable2
(
ID INT IDENTITY PRIMARY KEY NOT NULL,
Name VARCHAR(10) NOT NULL,
DOB DATETIME null
)
GO
INSERT INTO ##TempTable2
( Name, DOB )
VALUES (
'TONA', -- Name - varchar(10)
GETDATE() -- DOB - datetime
)
GO
SELECT * FROM ##TempTable2
Như ví dụ trên cho thấy, bạn có thể tao key cho bảng, và bạn cũng có thể tạo index luôn.
Do bảng tạm được lưu trong bộ nhớ nên chúng ta chỉ cần tạo ra một lần sau đó có thể sử dụng câu lệnh insert, update, delete mà không cần phải create bảng lại.
- Xóa bảng tạm. Cú pháp:
DROP TABLE #TempTable1
DROP TABLE ##TempTable2
Một dạng khác của bảng tạm đó chính là biến bảng. Với cú pháp:
DECLARE @TableName TABLE(
ID INT IDENTITY PRIMARY KEY NOT NULL,
Name VARCHAR(10) NOT NULL,
DOB DATETIME null
)
INSERT INTO @TableName
( Name, DOB )
VALUES (
'TONA', -- Name - varchar(10)
GETDATE() -- DOB - datetime
)
SELECT * FROM @TableName
- Biến bảng là biến dữ liệu kiểu bảng, được khởi tạo và lưu trong RAM như một biến bình thường chỉ khác là nó kiểu bảng. Do đó biến bảng cũng đóng vai trò như một bảng tạm. Chỉ khác là bảng tạm chỉ tạo một lần và có thể sử dụng trong suốt phiên đăng nhập, còn biến bảng sẽ mất khi khi kết thúc đoạn truy vấn.
Ngoài ra, khi bạn muốn tạo một function trong SQl-Server, bạn không thể sử dụng cú pháp Create Table được, do đó, biến bảng sẽ là lựa chọn khả dĩ nhất cho bạn.
- Vậy hiệu năng khi sử dụng hai dạng này có chệnh lệch nhiều không ?
Theo một nghiên cứu chưa được xác mình thì 2 dạng trên không có chênh lệch nhiều về hiệu năng khi các bảng có số lượng bản ghi không lớn (<10k rows).
Nhưng khi bạn phải xử lý với một bảng có số lượng bảng ghi lớn (>=1m rows ), sẽ có sự chênh lệch về hiệu năng giữa những câu lệnh insert, update và select.
Cụ thể:
Đối với câu lệnh Insert, biến bảng sẽ có hiệu năng lớn hơn rất đáng kể. Nhưng khi Select, bảng tạm sẽ có hiệu năng tốt hơn, do bảng tạm có thể thiết lập index, điều này là bất khả thi khi bạn declare một biến bảng. Tương tự, với cậu lệnh delete thì nếu bảng tạm có thiết lập index, việc xóa chúng sẽ mất nhiều thời gian hơn so với một biến bảng chỉ có dữ liệu.
Như vậy vấn đề chỉ có ở index của bảng, do đó, nếu muốn sử dụng bạn có thể yên tâm là 2 dạng này không có nhiều sự chênh lệch về hiệu năng, nhưng tùy trường hợp và mục đích mà bạn có thể cất nhắc lựa chọn loại bảng phù hợp với bài toán mình.
HAPPY CODING !!!
Chi tiết đánh giá hiệu năng, tham khảo tại đây)