Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Giới thiệu về bảng tạm thời trong SQL Server

Bảng tạm thời trong SQL Server, như tên cho thấy, là một bảng cơ sở dữ liệu tồn tại tạm thời trên máy chủ cơ sở dữ liệu. Bảng tạm thời lưu trữ một tập hợp con dữ liệu từ một bảng bình thường trong một khoảng thời gian nhất định.

Bảng tạm thời đặc biệt hữu ích khi bạn có một số lượng lớn các bản ghi trong một bảng và bạn liên tục cần phải tương tác với một tập hợp con nhỏ của các bản ghi đó. Trong những trường hợp như vậy thay vì lọc dữ liệu lặp đi lặp lại để tìm nạp tập hợp con, bạn có thể lọc dữ liệu một lần và lưu trữ trong một bảng tạm thời. Sau đó, bạn có thể thực hiện các truy vấn của mình trên bảng tạm thời đó. Các bảng tạm thời được lưu trữ bên trong “tempdb” là cơ sở dữ liệu hệ thống. Hãy xem cách bạn có thể sử dụng dữ liệu tạm thời trong một tình huống đơn giản.

Chuẩn bị dữ liệu

Đầu tiên chúng ta hãy chuẩn bị một số dữ liệu giả. Chúng tôi sẽ sử dụng dữ liệu này để tạo các bảng tạm thời.

Chạy tập lệnh sau trên máy chủ cơ sở dữ liệu của bạn.

CREATE DATABASE schooldb

CREATE TABLE student
(
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    gender VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    total_score INT NOT NULL,
    
 )


INSERT INTO student 

VALUES (1, 'Jolly', 'Female', 20, 500), 
(2, 'Jon', 'Male', 22, 545), 
(3, 'Sara', 'Female', 25, 600), 
(4, 'Laura', 'Female', 18, 400), 
(5, 'Alan', 'Male', 20, 500), 
(6, 'Kate', 'Female', 22, 500), 
(7, 'Joseph', 'Male', 18, 643), 
(8, 'Mice', 'Male', 23, 543), 
(9, 'Wise', 'Male', 21, 499), 
(10, 'Elis', 'Female', 27, 400);

Tập lệnh SQL trên tạo cơ sở dữ liệu ‘schooldb’. Trong cơ sở dữ liệu này, một bảng có tên "sinh viên" được tạo và một số dữ liệu giả được thêm vào bảng.

Tạo bảng tạm thời

Có hai phương pháp tạo bảng tạm thời.

Phương pháp 1

Cách đơn giản nhất để tạo bảng tạm thời là sử dụng câu lệnh INTO trong truy vấn SELECT. Hãy tạo một bảng tạm thời chứa tên, tuổi và giới tính của tất cả hồ sơ học sinh nam từ bảng học sinh.

USE schooldb;

SELECT name, age, gender
INTO #MaleStudents
FROM student
WHERE gender = 'Male'

Hãy xem truy vấn trên. Ở đây, chúng tôi đã tạo một bảng tạm thời “#MaleStudents” để lưu trữ tên, tuổi và giới tính của tất cả các hồ sơ học sinh nam từ bảng học sinh. Để định nghĩa một bảng tạm thời, chúng ta sử dụng câu lệnh INTO sau câu lệnh SELECT. Tên của bảng tạm thời phải bắt đầu bằng dấu thăng (#).

Bây giờ, để xem bảng này tồn tại ở đâu; vào “Object Explorer -> Databases -> System Databases-> tempdb -> Temporary Tables”. Bạn sẽ thấy tên bảng tạm thời của mình cùng với số nhận dạng. Hãy xem hình sau:

Chắc hẳn bạn đang thắc mắc về “000000000006” ở cuối tên bảng. Đây là một định danh duy nhất. Nhiều kết nối cơ sở dữ liệu có thể tạo các bảng tạm thời có cùng tên, do đó, để phân biệt giữa các bảng tạm thời được tạo bởi các kết nối khác nhau, máy chủ cơ sở dữ liệu sẽ tự động thêm số nhận dạng duy nhất này vào cuối.

Bạn có thể thực hiện các thao tác trên bảng tạm thời thông qua cùng một kết nối đã tạo ra nó. Do đó, trong cùng một cửa sổ truy vấn đã tạo bảng “#MaleStudents”, hãy thực hiện truy vấn sau.

SELECT * FROM #MaleStudents

Kể từ đó, bảng #MaleStudents chứa tên, tuổi và giới tính của tất cả nam sinh. Truy vấn trên sẽ tìm nạp các kết quả sau.

[id bảng =15 /]

Để tạo một kết nối mới, bạn chỉ cần mở một cửa sổ truy vấn mới trong “SQL Server Management Studio”. Bây giờ, hãy giữ kết nối trước đó mở và tạo một bảng “MaleStudents” khác bằng cách sử dụng phương pháp 2 trong cửa sổ truy vấn mới (kết nối mới).

Phương pháp 2

Phương pháp thứ hai tương tự như tạo bảng thông thường. Hãy xem truy vấn sau đây. Ở đây một lần nữa, chúng ta sẽ tạo bảng tạm thời #MaleStudents. Hãy nhớ rằng, truy vấn này phải được thực thi bằng một kết nối mới.

USE schooldb;

CREATE TABLE #MaleStudents
(
	name VARCHAR(50),
	age int,
	gender VARCHAR (50)

)

INSERT INTO #MaleStudents
SELECT name, age, gender
FROM student
WHERE gender = 'Male'

Bây giờ, nếu bạn thực hiện truy vấn trên, bạn sẽ thấy hai bảng tạm thời #MaleStudents với các số nhận dạng duy nhất khác nhau bên trong tempdb. Điều này là do hai bảng này đã được tạo bởi hai kết nối khác nhau. Hãy xem ảnh chụp màn hình sau.

Bảng tạm thời toàn cầu

Cần phải đề cập ở đây rằng, một bảng tạm thời chỉ có thể truy cập vào kết nối đã tạo ra bảng tạm thời đó. Nó không thể truy cập vào các kết nối khác. Tuy nhiên, chúng ta có thể tạo các bảng tạm thời có thể truy cập vào tất cả các kết nối đang mở. Các bảng tạm thời như vậy được gọi là bảng tạm thời toàn cục. Tên của bảng tạm thời toàn cục bắt đầu bằng ký hiệu băm kép (##). Hãy tạo một bảng tạm thời chung chứa các bản ghi của tất cả các học sinh nữ từ bảng học sinh.

USE schooldb;

SELECT name, age, gender
INTO ##FemaleStudents
FROM student
WHERE gender = 'Female'

Giờ đây, bạn có thể truy cập bảng ## FemaleStudents từ bất kỳ kết nối nào đang mở.

Xóa bảng tạm thời

Có hai cách để xóa các bảng tạm thời trong SQL Server:Xóa tự động và Xóa thủ công.

Xóa tự động

Bảng tạm thời sẽ tự động bị xóa khi kết nối đã tạo bảng bị đóng. Ngoài ra, khi bạn đóng cửa sổ truy vấn đã tạo bảng tạm thời mà không lưu các thay đổi, bảng sẽ bị đóng. Nếu một kết nối đang thực hiện một số truy vấn trên bảng chung thì các truy vấn đó phải được hoàn thành trước trước khi bảng chung bị xóa.

Xóa bảng thủ công

Bạn có thể xóa một bảng theo cách thủ công mà không cần đóng kết nối bằng cách sử dụng câu lệnh DROP TABLE. Tuy nhiên, hãy nhớ rằng câu lệnh phải được thực thi bởi kết nối thực sự tạo ra bảng. Hãy xem truy vấn sau:

DROP TABLE #MaleStudents

Điều này tương tự như việc xóa một bảng thông thường.

Bảng tạm thời và quy trình lưu trữ

Trước đó, chúng ta đã biết rằng một bảng tạm thời chỉ có thể được truy cập cục bộ bên trong kết nối đã tạo ra nó. Có một ngoại lệ cho quy tắc đó. Khi bạn đang tạo các thủ tục được lưu trữ, bạn cũng có thể truy cập các bảng tạm thời trong các kết nối khác.

Hãy tạo hai quy trình được lưu trữ bằng hai kết nối khác nhau. Quy trình được lưu trữ đầu tiên sẽ chèn dữ liệu vào bảng #MaleStudents, trong khi quy trình thứ hai sẽ chọn dữ liệu từ bảng.

Tạo một kết nối mới. Nếu bạn đang sử dụng SQL Server Management Studio, bạn có thể làm như vậy bằng cách mở một cửa sổ truy vấn mới. Thực thi tập lệnh SQL sau trong cửa sổ truy vấn mới.

Create Procedure spInsertStudent
    (@Name Varchar(50), @Age int,  @Gender Varchar(50))
As
Begin
    Insert Into #MaleStudents
    Values (@Name, @Age, @Gender)
End

Giờ đây, chúng tôi đã tạo một quy trình được lưu trữ để chèn bản ghi vào bảng tạm thời #MaleStudent. Lưu ý rằng kết nối này không tạo ra #MaleStudent, nhưng chúng tôi đang truy cập nó bằng cách chèn một bản ghi vào đó. Điều này là do khi tạo một thủ tục được lưu trữ, bạn có thể truy cập các bảng tạm thời từ một kết nối khác với kết nối đã tạo bảng. Nếu bạn thực hiện truy vấn trên, bạn sẽ thấy rằng SQL Server sẽ không xuất hiện bất kỳ lỗi nào.

Tương tự, hãy mở một kết nối mới và tạo quy trình được lưu trữ sau đây trong đó:

CREATE PROCEDURE spListStudent
AS
BEGIN

	SELECT * FROM #MaleStudents
	ORDER BY name
END

Quy trình được lưu trữ ở trên chọn tất cả các bản ghi từ bảng tạm thời #MaleStudents. Ở đây một lần nữa, chúng tôi đang truy cập một bảng tạm thời bên trong một kết nối không tạo bảng.

Bây giờ đây là phần khó khăn. Mặc dù bạn có thể truy cập một bảng tạm thời bên trong một kết nối khác khi tạo một thủ tục được lưu trữ, nhưng bạn không thể truy cập một bảng tạm thời khi “thực thi” một thủ tục được lưu trữ bên trong một kết nối khác. Để thực hiện một thủ tục được lưu trữ truy cập bảng tạm thời, bạn phải ở bên trong kết nối đã tạo bảng tạm thời.

Do đó, hãy thực thi các truy vấn sau bên trong kết nối đã tạo bảng #MaleStudents.

EXECUTE spInsertStudent Bradley, 45, Male
Execute spListStudent

Tại đây, thủ tục được lưu trữ đầu tiên sẽ chèn một hồ sơ học sinh mới với tên:Bradley, tuổi:45 và giới tính:Nam vào bảng #MaleStudents. Thủ tục được lưu trữ thứ hai chọn tất cả các bản ghi từ bảng #MaleStudents theo thứ tự tăng dần của tên. Kết quả của các thủ tục được lưu trữ ở trên sẽ là:

[id bảng =16 /]

Bạn có thể thấy rõ bản ghi mới được chèn của chúng tôi trong các bản ghi đã chọn ở trên.

Xem thêm:

Hiệu suất của các biến bảng trong SQL Server

Giới thiệu các biểu thức bảng phổ biến trong SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về Bảo mật cấp hàng trong SQL Server

  2. SQL Server câu lệnh tham gia có điều kiện

  3. Làm cách nào để tôi có thể sắp xếp chung một cột 'Số phiên bản' bằng cách sử dụng truy vấn máy chủ SQL

  4. Nhận ID hàng được chèn cuối cùng (với câu lệnh SQL)

  5. Cách sử dụng SQL Server HierarchyID thông qua các ví dụ đơn giản