Bảng tạm Temporary Tables trong SQL Server Ngày đăng: 21/08/2022

Trong bài này mình sẽ hướng dẫn cách tạo và sử dụng bảng tạm Temporary table trong SQL Server, cách sử dụng bảng tạm hiệu quả nhất.

1. Temporary Table là gì?

Temporary Table hay còn gọi là bảng tạm, đây là một dạng table đặc biệt được lưu trữ tạm thời trên SQL Server, nó rất hữu ích để lưu kết quả của một câu truy vấn SELECT nào đó để sử dụng nhiều lần.

Bảng tạm cũng là một table nên nó có đầy đủ các tính chất của table, nghĩa là bạn có thể thực hiện các thao tác như SELECT, INSERT trên đó một cách bình thường.

Bảng tạm có hai loại, thứ nhất là Local Temporary Table và thứ hai là Global Temporary Table. Trong phần 1 này chúng ta sẽ tìm hiểu Local Temporary Table trước nhé.

SQL Server cho phép bạn tạo bảng tạm bằng hai cách, thứ nhất là dùng cú pháp CREATE TABLE  và thứ hai là INSERT INTO.

Dùng INSERT INTO

Cách đầu tiên chúng ta sẽ dùng INSERT INTO để tạo bảng tạm, bạn sử dụng cú pháp như sau:

SELECT
    select_list
INTO
    temporary_table
FROM
    table_name
....

Tên của bảng tạm phải bắt đầu bằng dấu thăng #, xem ví dụ sau:

SELECT
    product_name,
    list_price
INTO #trek_products --- temporary table
FROM
    production.products
WHERE
    brand_id = 9;

Trong ví dụ này SQL Server sẽ tạo một bảng tạm tên là #trek_products, bảng này có 2 column đó là product_name list_price, dữ liệu của nó là kết quả trả về từ câu truy vấn trên.

Bạn hãy mở công cụ SSMS lên và thực hiện các thao tác theo thứ tự System Databases > tempdb > Temporary Tables thì sẽ thấy table bảng tạm sau:

Bảng tạm Temporary Tables trong SQL Server
NaN

Như bạn thấy trong hình chụp này thì tên của bảng tạm sẽ được bổ sung một hậu tố phía sau, điều này sẽ giúp tránh được trường hợp bị trùng tên bởi bảng tạm được lưu trữ chung trong một database tempdb.

Ghi chú thêm: Trong bài học chỗ này  (Bài 3 - phần 3) thì phần bài tập mình có sử dụng bảng tạm để các bạn dễ hình dung

Dùng CREATE TABLE

Lệnh Create Table sẽ tạo ra một bảng tạm rỗng nên sau khi tạo xong bạn phải sử dụng lệnh INSERT để thêm dữ liệu vào. Về cú pháp thì chỉ có sự khác biệt là tên của nó phải có dấu #.

CREATE TABLE #haro_products (
    product_name VARCHAR(MAX),
    list_price DEC(10,2)
);

Lệnh này sẽ tạo ra bảng tạm #haro_products gồm hai column đó là product_name list_price. Tuy nhiên nó không có dữ liệu nên mình sử dụng lệnh INSERT để thêm vào.

INSERT INTO #haro_products
SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    brand_id = 2;

Và đương nhiên sau này khi bạn thay đổi dữ liệu ở bảng gốc thì sẽ không ảnh hưởng gì đến dữ liệu của bảng tạm.

2. Global Temporary Table

Ở các ví dụ trên là Local Temporary Table, tức là nó chỉ tồn tại cho một phiên làm việc mà thôi. Không tin bạn hãy mở một connection khác và thực hiện câu SQL sau:

SELECT
    *
FROM
    #haro_products;

Bạn sẽ bị lỗi: Invalid object name '#haro_products'. 

Nếu bạn muốn bảng có thể được sử dụng cho nhiều phiên làm việc thì hãy chuyển nó thành Global bằng cách thêm hai dấu thăng ở tên table. Cú pháp như sau:

CREATE TABLE ##heller_products (
    product_name VARCHAR(MAX),
    list_price DEC(10,2)
);
 
INSERT INTO ##heller_products
SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    brand_id = 3;

Bây giờ bạn có thể truy vấn nó ở bất kì phiên làm việc nào.

3. Xóa Temporary Table

Mặc định của temporary sẽ bị xóa khỏi hệ thống khi một phiên làm việc chấm dứt. Ví dụ bạn đang làm ứng dụng website thì bạn nên thực hiện một kết nối thì có thể sử dụng toàn trang, còn bạn thực hiện 2 kết nối thì nếu kết nối thứ nhất tạo bảng tạm thì kết nối thứ hai không dùng được, đương nhiên cả hai kết nối phải chưa ngắt.

Nhưng đôi khi bạn muốn tự tay xóa thì hãy sử dụng lệnh DROP TABLE.

DROP TABLE ##table_name;

Không có gì khác so với một table bình thường.

Cách sử dụng VIEW trong SQL Server Ngày đăng: 21/08/2022

Trong bài này bạn sẽ được học về view và các thao tác quản lý view như: tạo view, xóa view, cập nhật dữ liệu cho view, và cuối cùng là các kiến thức liên quan như cơ chế hoạt động của view.

1. View trong SQL Server là gì?

Đặt vấn đề: Giả sử bạn là một nhà quản trị database (DBA) và bạn có nhiệm vụ mỗi cuối ngày sẽ lấy danh sách đơn hàng của hôm đó gửi lên cho leader.

Như vậy mỗi ngày bạn sẽ phải viết một câu truy vấn để lấy dữ liệu, hoặc bạn sẽ phải lưu câu SQL đó vào một file txt rồi mỗi khi cần thì copy và execute.

Giải pháp trên liệu có hay? Rất may là SQL Server cho bạn lưu trữ câu SQL thông qua view, nghĩa là bạn sẽ tạo một view dựa vào cấu trúc câu SQL đó và sau này mỗi khi cần lấy đơn hàng thì chỉ việc lấy trong view là được.

View cũng là một table nhưng chức năng của nó là chỉ để đọc, nên bạn không thể thực hiện các thao tác như insert, update hay delete trên view.

2. Tạo View trong SQL Server

Giả sử ta có hai bảng products brands, bây giờ mình cần lấy danh sách tất cả sản phẩm kèm theo thương hiệu tương ứng của mỗi sản phẩm thì sẽ viết câu truy vấn như sau:

SELECT
    product_name, 
    brand_name, 
    list_price
FROM
    production.products p
INNER JOIN production.brands b 
        ON b.brand_id = p.brand_id;


Và để tạo view cho câu SQL này thì ta viết như sau:

CREATE VIEW sales.product_info
AS
SELECT
    product_name, 
    brand_name, 
    list_price
FROM
    production.products p
INNER JOIN production.brands b 
        ON b.brand_id = p.brand_id;

Trong đó product_info là tên của view và sales là tên của schema.

Sau này khi muốn lấy danh sách sản phẩm và thương hiệu của nó thì mình chỉ cần chạy câu SQL sau:

SELECT * FROM sales.product_info;

Rất đơn giản phải không các bạn, không cần phải nhớ câu SQL dài dòng trên kia.

Mỗi một view có thể lưu trữ dữ liệu của nhiều table khác nhau vì nó là kết quả của câu truy vấn SELECT, đây chính là ưu điểm khiến view trở nên mạnh mẽ.

Cách sử dụng VIEW trong SQL Server

3. Các tính năng của View

Nói chung khi bạn sử dụng View thì sẽ có những lợi thế sau:

Về bảo mật

Bạn có thể hạn chế người dùng truy cập trực tiếp vào table, thay vào đó cho họ truy cập thông qua view nên sẽ an toàn hơn. Tại sao? Tại vì view chỉ là một khung nhìn nên chỉ cho phép đọc được thông tin tồn trại trong view, không được xem thêm thông tin hoặc thay đổi dữ liệu.

Ví dụ bạn có thể cho phép người dùng truy cập tên khách hàng, điện thoại, email thông qua chế độ xem nhưng hạn chế họ truy cập vào tài khoản ngân hàng và các thông tin nhạy cảm khác.

Đơn giản hóa

Khi viết câu truy vấn với nhiều bảng thì sẽ rất phức tạp, ban phải test nhiều thì mới chắc chắn là ra kết quả đúng, cũng có khi chưa chắc đúng. Tuy nhiên nếu kết hợp view thì bạn phân ra thành nhiều phân đoạn và mỗi view là một phân đoạn, sao đó thực hiện các phép truy vấn trên view thì sẽ dễ hiểu hơn nhiều.

Tính nhất quán

Đôi khi bạn cần viết một công thức phức tạp và được sử dụng trong nhiều câu truy vấn, lúc này bạn sẽ phải viết đi viết lại nhiều lần.

Nhưng nếu đưa công thức đó vào một view, sau đó các câu truy vấn kia tham chiếu từ view thì sẽ tiện lợi và nhất quán, sau này chỉnh sửa công thức thì chỉ cần sửa ở view.

SQL Server Tự động backup hàng ngày Ngày đăng: 21/08/2022

Vui lên thì mình viết chia sẻ cho anh em, lâu ngày không post gì blog nó sắp mốc meo rồi :D. Đây là bài hướng tự động back-up SQL Server hàng ngày

Thứ 1: Mở SQL Server lên nhé. Sau đó mở cái Management và ấn vào dấu cộng để nó mở hết ra

SQL Server Tự động backup hàng ngày

Thứ 2: Chuột phải vào Maintenance Plans và chọn New Maintenance. (xem tớ làm ảnh bên dưới nhé).

SQL Server Tự động backup hàng ngày

Bây giờ thì gõ tên Gì cũng đc (Tiếng việt không dấu viết liền cho chắc ăn nhá) --> Bấm OK

SQL Server Tự động backup hàng ngày

Thứ 3: Mở cái Toolbox and SampleDatabaseBackup – sa [Design] nó sẽ mở ra 1 tab như bên dưới và chọn tiếp.

Ở phần Genaral --> “Back Up Database Task

SQL Server Tự động backup hàng ngày

Clips đúp chuột và “Back Up Database Task”. Back Up Database Task sẽ mở ra 1 cửa sổ

SQL Server Tự động backup hàng ngày

Thứ 4: Chọn

- Backup type: Full

- Database(s): Thì chọn database mà bạn cần backup nhé

SQL Server Tự động backup hàng ngày

Tiếp:

- Backup componet: - Chọn databse

- Chọn folder để chứa file Backup theo hình phía dưới

SQL Server Tự động backup hàng ngày

Thứ 5: - Bước này sẽ tạo Schedule cho nó

- Click vào Job Schedule Properties - tùy chọn ngày giờ bạn muốn nó Thực hiện việc back-up tự động này rồi bấm OK là xong!

SQL Server Tự động backup hàng ngày

Thứ 6:

Khi đóng tác vụ Back-Up Databse Task  - Nó sẽ hỏi có muôn LƯU không thì nhớ bấm CÓ nhé :))

SQL Server Tự động backup hàng ngày

Thứ 7:

Kiểm tra phát nữa cho chắc ăn, xem thằng SQL Server Agent nó có chạy không nhá. Nếu không chạy thì bạn vào SQL Agent start cho thằng Agent service này nó chạy nhá

SQL Server Tự động backup hàng ngày

Chủ nhật :))

Test cái chơi

SQL Server Tự động backup hàng ngày

 

Vậy ngon rồi :))

 

SQL Server tìm dữ liệu trùng trong cột Ngày đăng: 21/08/2022

Thực thi câu lệnh để tìm kiếm giá trị trùng lớn hơn 1 trong dữ liệu

Khi bạn muốn nhóm các đối tượng trùng trong table từ các cột dữ liệu sử dụng câu lệnh đơn giản như sau

select * from TEN_TABLE where COLUMN in ( select COLUMN from TEN_TABLE group by COLUMN having count(*) > 1 )

* Giải thích tí chỗ này nhá: Chúng ta sẽ tìm các giá trị trong COLUMN có số lượng > 1 

Còn thích viết loằng ngoằng và nguy hiểm hơn thì viết thế này

select TEN_COLUMN, COUNT(*) as TEN_COLUMN_MOI from TABLE group by TEN_COLUMN having COUNT(*) >1 order by TEN_COLUMN_MOI desc

Chỗ này có nghĩa là lấy ra bảng TEN_COLUMN_MOI và sort nó ra cho hoành tráng thôi!

Cảm ơn các bạn đọc bài! 

Có gì cứ commnent tớ trả lời liền, nếu tớ biết :D

SQL Server Tìm và thay thế đối tượng Ngày đăng: 21/08/2022

SQL Server find and replace colum

Các bạn hai phương án xử lý việc này

Tìm và thay thế dữ liệu trong cột

1. Với bảng dữ liệu đơn giản

Một phát ăn ngay ở đây luôn, không cần phải nghĩ. Bạn cứ thể dùng thoải mái

BEGIN TRANSACTION; 
UPDATE table_name SET column_name=REPLACE(column_name,'text_to_find','replace_with_this'); 
COMMIT TRANSACTION;


2. Bảng dữ liệu có nhiều bảng mã, nôm na nó là Unicode

- Thì các bạn sử dụng mấy chỗ này, trước khi replace thì nó sẽ thực hiện convert để tránh lỗi font

begin transaction
update news set Content=CAST(REPLACE(CAST(Content as NVarchar(MAX)),'CŨ','MỚI') AS NText)
commit transaction;

3. Tìm và thay thế từ vị trí

UPDATE TABLE
SET COLUMN= STUFF(COLUMN, thu_tu, so_ki_tu, 'noi_dung_thay_the')
WHERE COLUMN theo_cai_gi_do

Trước khi làm thì cần thử trước cho chắc cú đã

SELECT STUFF(COLUMN, thứ tự, số kí tự, 'nội dung thay thế')
FROM TABLE where COLUMN like cai_gi_do

Các bạn để ý chỗ này tớ dùng STUFF

- Theo từ điển dịch thì STUFF có nghĩa là Nhồi nhét :D

- Còn theo định nghĩa STUFF trong SQL là:

Hàm STUFF trong SQL Server được dùng để chèn một chuỗi vào một chuỗi khác, kết quả trả về là một chuỗi mới sau khi đã hủy bỏ một số ký tự hiện có và thêm vào một chuỗi con khác tại vị trí vừa hủy bỏ.

Trả về là chuỗi mới sau khi đã hủy bỏ một số ký tự hiện có và thêm vào một chuỗi con khác tại vị trí vừa hủy bỏ

(chỗ này copy trên mạng)

Nên dùng STUFF là cũng dễ hiểu thôi!