Vì vậy, bạn có một danh sách được phân tách bằng dấu phẩy và bây giờ bạn cần chèn nó vào cơ sở dữ liệu. Nhưng vấn đề là, bạn cần phải chèn từng giá trị trong danh sách vào hàng bảng của chính nó. Vì vậy, về cơ bản, bạn cần chia danh sách thành các giá trị riêng biệt, sau đó chèn từng giá trị đó vào một hàng mới.
T-SQL hiện có STRING_SPLIT()
chức năng làm cho loại hoạt động này trở nên dễ dàng. Chức năng này lần đầu tiên có trong SQL Server 2016 và khả dụng trên cơ sở dữ liệu có mức độ tương thích từ 130 trở lên (cách kiểm tra mức độ tương thích cơ sở dữ liệu của bạn và cách thay đổi nó).
Ví dụ
Giả sử chúng ta có danh sách được phân tách bằng dấu phẩy sau:
Cat,Dog,Rabbit
Chúng tôi có thể sử dụng STRING_SPLIT()
chức năng tách từng giá trị thành hàng riêng của nó. Như thế này:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Kết quả:
value ------ Cat Dog Rabbit
Vậy là chúng ta đã đi được nửa chặng đường rồi. Trên thực tế, tùy thuộc vào yêu cầu của bạn, đây có thể là tất cả những gì bạn cần.
Chèn các giá trị vào bảng
Chúng ta có thể lấy đoạn mã trên và sử dụng nó với INSERT()
tuyên bố. Nói cách khác, chúng ta có thể chèn các giá trị đó vào một bảng và mỗi mục danh sách sẽ nằm trong hàng riêng của nó. Để thực hiện việc này, chúng ta chỉ cần thêm tiền tố mã trước đó bằng INSERT()
tuyên bố.
Ví dụ:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Thao tác này sẽ chèn từng giá trị vào hàng riêng của nó trong AnimalName
cột của Animals
bảng.
Kiểm tra kết quả
Để kiểm tra kết quả, hãy chạy SELECT
tuyên bố chống lại bảng:
SELECT * FROM Animals;
Kết quả:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
Kết quả này giả định rằng AnimalId
cột là một IDENTITY
cột (các giá trị tăng dần được chèn tự động với mỗi hàng mới).
Tập lệnh đầy đủ
Đây là một tập lệnh cho phép bạn thực hiện ví dụ trên chỉ trong một lần. Nó tạo cơ sở dữ liệu, tạo bảng, chèn dữ liệu, sau đó kiểm tra kết quả.
Tạo cơ sở dữ liệu:
/* Create database */ USE master; CREATE DATABASE Nature;
Thực hiện phần còn lại:
/* Create table */ USE Nature; CREATE TABLE Animals ( AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AnimalName nvarchar(255) NOT NULL ); /* Insert data from the list */ INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ','); /* Check the result */ SELECT * FROM Animals;