Chèn dữ liệu với INSERT

Chèn dữ liệu với lệnh INSERT trong SQL

Giới thiệu

Trong chương này, chúng ta sẽ tìm hiểu cách INSERT INTO Câu lệnh SQL hoạt động và các tùy chọn khác nhau được sử dụng với câu lệnh INSERT.

Chèn câu lệnh INTO trong SQL

Câu lệnh INSERT INTO trong SQL được sử dụng để chèn một bản ghi hoặc nhiều bản ghi vào một bảng cơ sở dữ liệu bằng SQL.
Câu lệnh INSERT INTO trong SQL thêm dữ liệu của một hoặc nhiều bản ghi vào cơ sở dữ liệu. Tất cả các hàng có thể được chèn vào hoặc một tập hợp con có thể được chọn bằng cách sử dụng một điều kiện.
Đây là cú pháp của câu lệnh INSERT INTO. INSERT INTO được theo sau bởi một tên bảng với các cột của nó và theo sau là VALUES và các giá trị của các cột tương ứng.
Cú pháp
  1. INSERT INTO table
  2. (column1, column2, … )
  3. VALUES
  4. (expression1, expression2, … ),
  5. (expression1, expression2, … ),
  6. …;

Chèn một hàng vào bảng

Ví dụ sau chèn một hàng vào bảng EmployeeDetails trong cơ sở dữ liệu mẫu.
Các cột trong bảng này là EmpId, EmpName, EmpAddress và EmpCity. Vì các giá trị cho tất cả các cột được cung cấp và được liệt kê theo thứ tự giống như các cột trong bảng nên không cần phải chỉ định tên cột trong danh sách cột.
Cú pháp
  1. Insert into EmployeeDetails values(‘Ravi’,‘c-321 Sector55 Noida’,‘Noida’,‘Noida’,9978654332)
Ví dụ  

Chèn nhiều hàng vào một bảng

Câu lệnh INSERT INTO có thể được sử dụng để chèn nhiều hàng bằng cách nhóm câu lệnh. SQL sau chèn ba hàng vào bảng EmployeeDetail trong cơ sở dữ liệu mẫu. Vì các giá trị cho tất cả các cột được cung cấp và được liệt kê theo thứ tự giống như các cột trong bảng nên không cần phải chỉ định tên cột trong danh sách cột.
Cú pháp
  1. Insert into EmployeeDetails values(‘Ravi’,‘c-321 Sector55 Noida’,‘Noida’,‘Noida’,9978654332,‘Rohan’,
  2. ‘D-211 NoidaSector44’,‘Noida’,‘GauthamBudhNagar’,9865454398,
  3. ‘Rohit’,‘C-321 Sector 64 Faridabad’,‘Faridabad’,‘OldFaridabad’,9892124359)
Ví dụ

Chèn dữ liệu không theo cùng thứ tự với các cột trong bảng

Ví dụ này sử dụng danh sách cột để xác định rõ ràng các giá trị được chèn vào mỗi cột.
Thứ tự cột trong bảng EmployeeDetail trong cơ sở dữ liệu Mẫu là EmpName, EmpAddress, EmpCity; tuy nhiên, các cột không được liệt kê theo thứ tự đó trong column_list .
Cú pháp
  1. Insert into EmployeeDetails values(‘PriyanK’,‘Indrapuram,’,‘Ghaziabd’‘Ghaziabad’,9055345544, GETDATE());

Chèn dữ liệu vào bảng với các cột có giá trị mặc định

Câu lệnh này cho thấy việc chèn hàng vào bảng có cột tự động tạo giá trị hoặc có giá trị mặc định. Column_1 là cột được tính toán tự động tạo giá trị bằng cách nối chuỗi có giá trị được chèn vào column_2. Column_2 được xác định với một ràng buộc mặc định.
Nếu một giá trị không được chỉ định cho cột này, thì giá trị mặc định sẽ được sử dụng.
Column_3 được xác định bằng kiểu dữ liệu phiên bản hàng, kiểu này sẽ tự động tạo một số nhị phân tăng dần, duy nhất.
Column_4 không tự động tạo giá trị. Khi một giá trị cho cột này không được chỉ định, NULL sẽ được chèn vào. Câu lệnh INSERT chèn các hàng chứa giá trị cho một số cột nhưng không phải tất cả. Trong câu lệnh INSERT cuối cùng, không có cột nào được chỉ định và chỉ các giá trị mặc định được chèn bằng cách sử dụng mệnh đề DEFAULT VALUES.
Cú pháp
  1. CREATE TABLE Employee
  2. (
  3.     column_1 AS ‘Computed column ‘ + column_2,
  4.     column_2 varchar(30)
  5.         CONSTRAINT default_name DEFAULT (‘my column default’),
  6.     column_3 rowversion,
  7.     column_4 varchar(40) NULL
  8. );
  9. GO
  10. INSERT INTO Employee (column_4)
  11.     VALUES (‘Explicit value’);
  12. INSERT INTO Employee (column_2, column_4)
  13.     VALUES (‘Explicit value’‘Explicit value’);
  14. INSERT INTO Employee (column_2)
  15.     VALUES (‘Explicit value’);
  16. INSERT INTO Employee DEFAULT VALUES;
  17. GO
  18. SELECT column_1, column_2, column_3, column_4
  19. FROM Employee;
  20. GO

Chèn dữ liệu vào bảng có cột nhận dạng

INSERT dữ liệu vào một cột nhận dạng. Hai câu lệnh INSERT đầu tiên cho phép tạo các giá trị nhận dạng cho các hàng mới.
Câu lệnh INSERT thứ ba ghi đè thuộc tính IDENTITY cho cột bằng câu lệnh SET IDENTITY_INSERT và chèn một giá trị rõ ràng vào cột nhận dạng.
 
Cú pháp
  1. CREATE TABLE StudentDetail (
  2. StudentID  int IDENTITY(1,1),
  3. StudentName varchar(50),
  4. StudentAddress varchar(50),
  5. StudentCiy varchar(50)
  6. )
  7. Go
  8. INSERT StudentDetail VALUES (‘Ravin’,‘101 Noida Sector 63’,‘Noida’);
  9. INSERT StudentDetail  VALUES (‘Rohit’,‘103 Rahul Vihar’,‘NewDelhi’);
  10. GO
  11. SET IDENTITY_INSERT StudnetDetail ON;
  12. GO
  13. INSERT INTO StudentDetail(StudentID,StudentName,StudentAddress,StudentCiy)
  14.     VALUES (‘Amar’,‘flatNo108 Preet Vihar’,‘NewDelhi’);
  15. GO
  16. SELECT StudentID,StudentName,StudentAddress,StudentCiy
  17. FROM StudentDetail
  18. GO
Ví dụ

Chèn dữ liệu vào cột định danh duy nhất bằng cách sử dụng NEWID() 

Cột uniquidentifier sử dụng hàm NEWID() để lấy GUID cho column_2. Không giống như các cột nhận dạng, Database Engine không tự động tạo các giá trị cho các cột có kiểu dữ liệu định danh duy nhất, như được hiển thị bởi câu lệnh INSERT thứ hai.
Cú pháp
  1. CREATE TABLE  CollegeDetail
  2. (
  3.     CollegeId int IDENTITY,
  4.     CollegeName uniqueidentifier,
  5. );
  6. GO
  7. INSERT INTO dbo.CollegeDetail(CollegeName)
  8.     VALUES (NEWID());
  9. INSERT INTO CollegeDetail DEFAULT VALUES;
  10. GO
  11. SELECT CollegeId, CollegeName
  12. FROM CollegeDetail
Ví dụ

INSERT INTO với các tùy chọn SELECT và EXECUTE để chèn dữ liệu từ các bảng khác

Ví dụ sau đây cho thấy cách chèn dữ liệu từ một bảng vào một bảng khác bằng cách sử dụng lệnh INSERT…SELECT hoặc INSERT…EXECUTE. Mỗi cái dựa trên một câu lệnh SELECT nhiều bảng bao gồm một biểu thức và một giá trị bằng chữ trong danh sách cột.
Câu lệnh INSERT đầu tiên sử dụng câu lệnh SELECT để lấy dữ liệu từ các bảng nguồn (Employee, EmployeeDetails, and EmployeeDetail) trong cơ sở dữ liệu Sample và lưu trữ tập hợp kết quả trong bảng EmployeeDetails. Câu lệnh INSERT thứ hai sử dụng mệnh đề EXECUTE để gọi một thủ tục được lưu trữ có chứa câu lệnh SELECT và câu lệnh INSERT thứ ba sử dụng mệnh đề EXECUTE để tham chiếu câu lệnh SELECT dưới dạng một chuỗi ký tự.

Cú pháp

  1. CREATE TABLE NewEmployeeDetail
  2. (
  3. Id int Primary kei Identity(1,1),
  4. DataSource   varchar(20) NOT NULL,
  5.   BusinessEntityID   varchar(11) NOT NULL,
  6.   LastName     varchar(40) NOT NULL,
  7.   SalesDollars money NOT NULL
  8. );
  9. GO
  10. CREATE PROCEDURE dbo.uspGetEmployeeSales
  11. AS
  12.     SET NOCOUNT ON;
  13.     SELECT ‘PROCEDURE’, sp.BusinessEntityID, c.LastName,
  14.         sp.SalesYTD
  15.     FROM Sales.SalesPerson AS sp
  16.     INNER JOIN Person.Person AS c
  17.         ON sp.BusinessEntityID = c.BusinessEntityID
  18.     WHERE sp.BusinessEntityID LIKE ‘2%’
  19.     ORDER BY sp.BusinessEntityID, c.LastName;
  20. GO
  21. –INSERT…SELECT example    
  22. INSERT INTO dbo.EmployeeSales
  23.     SELECT ‘SELECT’, sp.BusinessEntityID, c.LastName, sp.SalesYTD
  24.     FROM Sales.SalesPerson AS sp
  25.     INNER JOIN Person.Person AS c
  26.         ON sp.BusinessEntityID = c.BusinessEntityID
  27.     WHERE sp.BusinessEntityID LIKE ‘2%’
  28.     ORDER BY sp.BusinessEntityID, c.LastName;
  29. GO
  30. –INSERT…EXECUTE procedure example    
  31. INSERT INTO dbo.EmployeeSales
  32. EXECUTE dbo.uspGetEmployeeSales;
  33. GO
  34. –INSERT…EXECUTE(‘string’) example    
  35. INSERT INTO dbo.EmployeeSales
  36. EXECUTE
  37. (‘
  38. SELECT EXEC STRING, sp.BusinessEntityID, c.LastName,
  39.     sp.SalesYTD
  40.     FROM Sales.SalesPerson AS sp
  41.     INNER JOIN Person.Person AS c
  42.         ON sp.BusinessEntityID = c.BusinessEntityID
  43.     WHERE sp.BusinessEntityID LIKE 2%
  44.     ORDER BY sp.BusinessEntityID, c.LastName
  45. ‘);
  46. GO
  47. –Show results.    
  48. SELECT DataSource,BusinessEntityID,LastName,SalesDollars
  49. FROM dbo.EmployeeSales;

Chèn biểu thức bảng chung để xác định dữ liệu 

Câu lệnh INSERT tạo bảng NewEmployee trong Sampledatabase. Một biểu thức bảng chung (EmployeeDetails) xác định các hàng từ một hoặc nhiều bảng sẽ được chèn vào bảng NewEmployee. Câu lệnh INSERT tham chiếu đến các cột trong biểu thức bảng chung.

Cú pháp

  1. CREATE TABLE  NewEmployee
  2. (
  3.     EmployeeID int NOT NULL,
  4.     LastName nvarchar(50) NOT NULL,
  5.     FirstName nvarchar(50) NOT NULL,
  6.     PhoneNumber Phone NULL,
  7.     AddressLine1 nvarchar(60) NOT NULL,
  8.     City nvarchar(30) NOT NULL,
  9.     State nchar(3) NOT NULL,
  10.     PostalCode nvarchar(15) NOT NULL,
  11.     CurrentFlag Flag
  12. );
  13. GO
  14. WITH EmployeeTemp (EmpID, LastName, FirstName, Phone,
  15.                    Address, City, StateProvince,
  16.                    PostalCode, CurrentFlag)
  17. AS (SELECT
  18.        e.BusinessEntityID, c.LastName, c.FirstName, pp.PhoneNumber,
  19.        a.AddressLine1, a.City, sp.StateProvinceCode,
  20.        a.PostalCode, e.CurrentFlag
  21.     FROM HumanResources.Employee e
  22.         INNER JOIN Person.BusinessEntityAddress AS bea
  23.         ON e.BusinessEntityID = bea.BusinessEntityID
  24.         INNER JOIN Person.Address AS a
  25.         ON bea.AddressID = a.AddressID
  26.         INNER JOIN Person.PersonPhone AS pp
  27.         ON e.BusinessEntityID = pp.BusinessEntityID
  28.         INNER JOIN Person.StateProvince AS sp
  29.         ON a.StateProvinceID = sp.StateProvinceID
  30.         INNER JOIN Person.Person as c
  31.         ON e.BusinessEntityID = c.BusinessEntityID
  32.     )
  33. INSERT INTO NewEmployee
  34.     SELECT EmpID, LastName, FirstName, Phone,
  35.            Address, City, StateProvince, PostalCode, CurrentFlag
  36.     FROM EmployeeTemp;
  37. GO

INSERT TOP để giới hạn dữ liệu được chèn từ bảng nguồn

INSERT tạo bảng Employee và chèn tên cũng như dữ liệu bán hàng từ đầu năm đến nay cho 5 nhân viên ngẫu nhiên hàng đầu từ bảng EmployeeDetails. EmployeeId trong cơ sở dữ liệu Sample database. Câu lệnh INSERT chọn bất kỳ 5 hàng nào được trả về bởi câu lệnh SELECT.
Mệnh đề OUTPUT hiển thị các hàng được chèn vào bảng EmployeeDetails. Lưu ý rằng mệnh đề ORDER BY trong câu lệnh SELECT không được sử dụng để xác định 5 nhân viên hàng đầu.
Cú pháp
  1. CREATE TABLE  Employee
  2. ( EmployeeID   nvarchar(11) NOT NULL,
  3.   LastName     nvarchar(20) NOT NULL,
  4.   FirstName    nvarchar(20) NOT NULL,
  5.   YearlySales  money NOT NULL
  6.  );
  7. GO
  8. INSERT TOP(5)INTO  employeeDetails
  9.     OUTPUT inserted.EmployeeID, inserted.FirstName,
  10.         inserted.LastName, inserted.YearlySales
  11.     SELECT sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD
  12.     FROM Employee     AS sp
  13.     INNER JOIN Person.Person AS c
  14.         ON sp.BusinessEntityID = c.BusinessEntityID
  15.     WHERE sp.SalesYTD > 250000.00
  16.     ORDER BY sp.SalesYTD DESC;

INSERT dữ liệu bằng cách chỉ định dạng xem trong SQL

INSERT chỉ định tên chế độ xem làm đối tượng đích; tuy nhiên, hàng mới được chèn vào bảng cơ sở bên dưới. Thứ tự của các giá trị trong câu lệnh INSERT phải khớp với thứ tự cột của dạng xem.
Cú pháp
  1. CREATE TABLE Students (StudentID int, StudentName varchar(30));
  2. GO
  3. CREATE VIEW Student AS
  4. SELECT  StudentID, StudentName
  5. FROM Students
  6. GO
  7. INSERT INTO  Student
  8.     VALUES (1,‘Ravi’);
  9. GO
  10. SELECT StudentID, StudentName  from Students
  11. GO
  12. SELECT  StudentID,StudentName
  13. FROM  Student
  14. GO
Ví dụ 

Chèn dữ liệu vào một biến bảng 

Dữ liệu INSERT chỉ định một biến bảng làm đối tượng đích trong cơ sở dữ liệu Sample database.
Cú pháp
  1. — Create the table variable.    
  2. DECLARE @MyTableVar table(
  3.     LocationID int NOT NULL,
  4.     CostRate smallmoney NOT NULL,
  5.     NewCostRate AS CostRate * 1.5,
  6.     ModifiedDate datetime);
  7. — Insert values into the table variable.    
  8. INSERT INTO @MyTableVar (LocationID, CostRate, ModifiedDate)
  9.     SELECT LocationID, CostRate, GETDATE()
  10.     FROM Production.Location
  11.     WHERE CostRate > 0;
  12. — View the table variable result set.    
  13. SELECT * FROM @MyTableVar;
  14. GO

Chèn hàng vào bảng từ xa

Phần này trình bày cách chèn các hàng vào bảng mục tiêu từ xa bằng cách sử dụng máy chủ được liên kết hoặc chức năng tập hợp hàng để tham chiếu bảng từ xa.

Chèn dữ liệu vào bảng từ xa bằng cách sử dụng máy chủ được liên kết

Điều này INSERT các hàng vào một bảng từ xa. Ví dụ bắt đầu bằng cách tạo một liên kết đến nguồn dữ liệu từ xa bằng cách sử dụng sp_addlinkedserver. Tên máy chủ được liên kết, MyLinkServer, sau đó được chỉ định như một phần của tên đối tượng gồm bốn phần ở dạng  server.catalog.schema.object .
Cú pháp
  1. USE master;
  2. GO
  3. — Create a link to the remote data source.     
  4. — Specify a valid server name for @datasrc as ‘server_name’   
  5. — or ‘server_nameinstance_name’.    
  6. EXEC sp_addlinkedserver @server = N‘MyLinkServer’,
  7.     @srvproduct = N‘ ‘,
  8.     @provider = N‘SQLNCLI’,
  9.     @datasrc = N‘server_name’,
  10.     @catalog = N‘Sample’;
  11. GO

Chèn dữ liệu vào một bảng từ xa bằng cách sử dụng hàm OPENQUERY 

INSERT một hàng vào một bảng từ xa bằng cách chỉ định hàm OPENQUERY rowset.
Tên máy chủ được liên kết được tạo trong ví dụ trước được sử dụng trong ví dụ này.
Cú pháp
  1. INSERT OPENQUERY (MyLinkServer,
  2.     ‘SELECT EmployeeName, EmployeeAddress
  3.      FROM Sample.EmployeeDetails’)
  4. VALUES (‘Ravi’‘Noida’);
  5. GO

Chèn dữ liệu vào một bảng từ xa bằng cách sử dụng chức năng OPENDATASOURCE

Cú pháp

  1. INSERT INTO OPENDATASOURCE(‘SQLNCLI’,
  2.     ‘Data Source= <server_name>; Integrated Security=SSPI’)
  3.     EmployeeDetail (EmpName, EmpAddress)
  4.     VALUES (‘Rahul’‘Noida63’);
  5. GO

Chèn vào một bảng bên ngoài được tạo bằng PolyBase

INSERT có thể được sử dụng để Xuất dữ liệu từ SQL Server sang Hadoop hoặc Azure Storage. Đầu tiên, chúng tôi tạo một bảng bên ngoài trỏ đến tệp hoặc thư mục đích.
Sau đó, sử dụng INSERT INTO để xuất dữ liệu từ bảng SQL Server cục bộ sang nguồn dữ liệu ngoài. Câu lệnh INSERT INTO tạo tệp hoặc thư mục đích nếu nó không tồn tại và kết quả của câu lệnh SELECT được xuất sang vị trí đã chỉ định ở định dạng tệp đã chỉ định.
 
cú pháp 
  1. CREATE EXTERNAL TABLE [dbo].[CustomerDetails] (
  2.         [FirstName] char(25) NOT NULL,
  3.         [LastName] char(25) NOT NULL,
  4.         [YearlyIncome] float NULL,
  5.         [MaritalStatus] char(1) NOT NULL
  6. )
  7. WITH (
  8.         LOCATION=‘/old_data/2009/customerdata.tbl’,
  9.         DATA_SOURCE = HadoopHDP2,
  10.         FILE_FORMAT = TextFileFormat,
  11.         REJECT_TYPE = VALUE,
  12.         REJECT_VALUE = 0
  13. );
  14. — Export data: Move old data to Hadoop while keeping   
  15. — it query-able via an external table.    
  16. INSERT INTO CustomerDetails
  17. SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2
  18. ON (T1.CustomerKey = T2.CustomerKey)
  19. WHERE T2.YearMeasured = 2009 and T2.Speed > 40;

Chèn dữ liệu bằng hàm OPENROWSET với BULK để tải dữ liệu hàng loạt vào bảng

Câu lệnh INSERT chèn các hàng từ tệp dữ liệu vào một bảng bằng cách chỉ định hàm OPENROWSET. Gợi ý bảng IGNORE_TRIGGERS được chỉ định để tối ưu hóa hiệu suất. Để biết thêm ví dụ, hãy xem Nhập dữ liệu hàng loạt bằng cách sử dụng BULK INSERT hoặc OPENROWSET(BULK…) (Máy chủ SQL).
Cú pháp
  1. INSERT INTO HumanResources.Department WITH (IGNORE_TRIGGERS) (Name, GroupName)
  2. SELECT b.Name, b.GroupName
  3. FROM OPENROWSET (
  4.     BULK ‘C:SQLFilesDepartmentData.txt’,
  5.     FORMATFILE = ‘C:SQLFilesBulkloadFormatFile.xml’,
  6.     ROWS_PER_BATCH = 15000)AS b ;

Gợi ý TABLOCK để chỉ định phương pháp khóa

Phần sau đây chỉ định rằng khóa độc quyền (X) được thực hiện trên EmployeeDetail và được giữ cho đến khi kết thúc câu lệnh INSERT.
Cú pháp
  1. INSERT INTO Production.Location WITH (XLOCK)
  2. (Name, CostRate, Availability)
  3. VALUES ( N‘Final Inventory’, 15.00, 80.00);

Chèn dữ liệu bằng tùy chọn SELECT

Dữ liệu INSERT cho biết cách chèn nhiều hàng dữ liệu bằng cách sử dụng câu lệnh INSERT với tùy chọn CHỌN. Câu lệnh INSERT đầu tiên sử dụng câu lệnh SELECT trực tiếp để truy xuất dữ liệu từ bảng nguồn và sau đó lưu trữ tập kết quả trong bảng EmployeeTitles.

Cú pháp 
  1. CREATE TABLE EmployeeData
  2. ( EmployeeKey   INT NOT NULL,
  3.   LastName     varchar(40) NOT NULL,
  4.   Title      varchar(50) NOT NULL
  5. );
  6. INSERT INTO EmployeeData
  7.     SELECT EmployeeKey, LastName, Title
  8.     FROM EmployeeData
  9.     WHERE EndDate IS NULL;

 

 

(Source: https://www.c-sharpcorner.com/)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *