Hôm nay TheCodeRoot sẽ hướng dẫn cách insert data sử dụng Table Value Parameter. Đây là một data type do người dùng tự định nghĩa, sử dụng như một input chứa nội dung là một table.

Hôm nay TheCodeRoot sẽ hướng dẫn cách insert data sử dụng Table Value Parameter. Đây là một data type do người dùng tự định nghĩa, sử dụng như một input chứa nội dung là một table.

1. Tạo table value parameter type

Các bạn định nghĩa một data type theo cấu trúc mong muốn, cấu trúc tương tự như khi định nghĩa 1 table.

Ví dụ:

CREATE TYPE typDevice AS TABLE (
	DeviceCode varchar(64),
	DeviceName nvarchar(128),
	Brand nvarchar(64), 
	Status smallint
)

 

2. Sử dụng trong SP:

Để sử dụng TVP trong SP, các bạn khai báo 1 input với data type được tạo trước đó.

Ví dụ dưới đây cho phép insert 1 danh sách Device sử dụng TVP typDevice đã tạo bên trên:

CREATE PROCEDURE [dbo].[uspAddDevice]
	@DeviceList typDevice READONLY		
AS
DECLARE @Return int
SET @Return = 1

INSERT INTO dbo.Device(
	DeviceCode, 
	DeviceName,
	Brand, 
	CreateDate, 
	Status
	)
SELECT 
	DeviceCode, 
	DeviceName,
	Brand, 
	getdate() AS CreateDate, 
	Status
FROM @DeviceList

IF @@ROWCOUNT = 0
	SET @Return = 0

RETURN @Return

GO

Lưu ý:

TYP chỉ được sử dụng trong input với READONLY, nghĩa là bạn không thể Update, Insert hay Delete.

TVP sử dụng trong SP tương tự như 1 table bình thường

 

3. Thực thi:

DECLARE @DeviceList typDevice

INSERT INTO @DeviceList(DeviceCode, DeviceName, Brand, Status)
SELECT '001', N'Laptop Samsung', 'SAMSUNG', 1 UNION
SELECT '002', N'Laptop HP', 'HP', 1 UNION
SELECT '003', N'Laptop Dell', 'DELL', 1 

EXEC [uspAddDevice] @DeviceList = @DeviceList

 

4. Kết quả:

Lưu ý:

Khi muốn update TVP bạn cần Drop tất cả đối tượng liên quan sử dụng TVP, drop TVP và tạo lại.

Đây là một hạn chế của TVP, bạn có thể cân nhắc khi sử dụng. Không tạo quá nhiều đối tượng cùng sử dụng 1 TVP để khi cần update không phải drop nhiều đối tượng cùng lúc.

Chúc các bạn thành công.

minhnhatict@gmail.com SQL Server