Lệnh INSERT trong SQL Server
Mục lục
Giới thiệu lệnh INSERT trong SQL Server
Câu lệnh insert sử dụng để thêm dữ liệu vào bảng trong SQL Server
Cú pháp:
INSERT INTO table_name (column_list)
VALUES (value_list)
Giải thích:
- table_name: tên của bảng muốn thêm dữ liệu mới
- column_list : danh sách các column, phân tách nhau bởi dấu “,”
- value_list: là danh sách các giá trị tương ứng với column, phân tách nhau bởi dấu “,”
- Lưu ý: Các cặp giá trị của column và value tương ứng và so khớp về thứ tự và số lượng với nhau. Cần tuân thủ đúng cú pháp
Ví dụ:
INSERT INTO Person.PersonPhone (BusinessEntityID, PhoneNumber, PhoneNumberTypeID, ModifiedDate) VALUES (299,'699-511-0142,1','2020-10-12')
Cú pháp ngắn gọn ( không cần định nghĩa cột, chỉ cần xác định đúng thứ tự của giá trị truyền vào):
INSERT INTO Person.PersonPhone VALUES (20777,'699-511-0143',1,'2020-10-12')
Giá trị của các column tương ứng như sau:
- BusinessEntityID: 299
- PhoneNumber: 699-511-0142
- PhoneNumberTypeID: 1
- ModifiedDate: 2020-10-12
Một số tình huống nên lưu ý với lệnh INSERT
Test câu lệnh insert này trong AdventureWorks2019:
USE [AdventureWorks2019]
GO
INSERT INTO [Production].[Product]
([Name]
,[ProductNumber]
,[MakeFlag]
,[FinishedGoodsFlag]
,[Color]
,[SafetyStockLevel]
,[ReorderPoint]
,[StandardCost]
,[ListPrice]
,[Size]
,[SizeUnitMeasureCode]
,[WeightUnitMeasureCode]
,[Weight]
,[DaysToManufacture]
,[ProductLine]
,[Class]
,[Style]
,[ProductSubcategoryID]
,[ProductModelID]
,[SellStartDate]
,[SellEndDate]
,[DiscontinuedDate]
,[rowguid]
,[ModifiedDate])
VALUES
('Laptop Thinkpad L470'
,'SKU-001'
,0
,0
,null
,1000
,750
,0
,0
,null
,null
,null
,null
,0
,null
,null
,null
,null
,null
,'2008-05-01'
,null
,null
,NEWID()
,'2022-05-01'
)
GO
Lệnh này thì lỗi:
USE [AdventureWorks2019]
GO
INSERT INTO [Production].[Product]
(
[ProductID],
[Name]
,[ProductNumber]
,[MakeFlag]
,[FinishedGoodsFlag]
,[Color]
,[SafetyStockLevel]
,[ReorderPoint]
,[StandardCost]
,[ListPrice]
,[Size]
,[SizeUnitMeasureCode]
,[WeightUnitMeasureCode]
,[Weight]
,[DaysToManufacture]
,[ProductLine]
,[Class]
,[Style]
,[ProductSubcategoryID]
,[ProductModelID]
,[SellStartDate]
,[SellEndDate]
,[DiscontinuedDate]
,[rowguid]
,[ModifiedDate])
VALUES
(
1001,
'Laptop Thinkpad L470'
,'SKU-001'
,0
,0
,null
,1000
,750
,0
,0
,null
,null
,null
,null
,0
,null
,null
,null
,null
,null
,'2008-05-01'
,null
,null
,NEWID()
,'2022-05-01'
)
GO
Lý do: trong bảng Product, cột ProductID là khóa chính (primary key) và được gán thuộc tính tự tăng (identity), trong SQL Server không được gán giá trị cho cột có giá trị tự tăng để đảm bảo toàn vẹn dữ liệu, vì vậy, chúng ta chỉ cần không insert dữ liệu vào cột ProductID là ok, cột đó sẽ được SQL Server tự động tạo dữ liệu theo cơ chế tự tăng.
INSERT lấy thông tin trả về
Tất cả dữ liệu vừa được insert sẽ được lưu trong biến inserted, và để lấy dữ liệu của inserted thì ta dùng lệnh OUTPUT. Nếu muốn lấy nhiều cột hơn ra output, phân tách các cột bởi dấu phẩy “,”:
Ví dụ lấy ID vừa inserted
USE [AdventureWorks2019]
GO
INSERT INTO [Production].[Product]
([Name]
,[ProductNumber]
,[MakeFlag]
,[FinishedGoodsFlag]
,[Color]
,[SafetyStockLevel]
,[ReorderPoint]
,[StandardCost]
,[ListPrice]
,[Size]
,[SizeUnitMeasureCode]
,[WeightUnitMeasureCode]
,[Weight]
,[DaysToManufacture]
,[ProductLine]
,[Class]
,[Style]
,[ProductSubcategoryID]
,[ProductModelID]
,[SellStartDate]
,[SellEndDate]
,[DiscontinuedDate]
,[rowguid]
,[ModifiedDate])
OUTPUT inserted.ProductID, inserted.Name
VALUES
('Dell Inspiron 5570'
,'SKU-002'
,0
,0
,null
,1000
,750
,0
,0
,null
,null
,null
,null
,0
,null
,null
,null
,null
,null
,'2008-05-01'
,null
,null
,NEWID()
,'2022-05-01'
)
GO
1 Comments