Bài viết hôm nay sẽ giới thiệu cú pháp insert data đơn giản cũng như hướng dẫn cách viết stored procedure giúp kiểm tra thông tin đăng nhập của user.

Bài viết hôm nay sẽ giới thiệu cú pháp insert data đơn giản cũng như hướng dẫn cách viết stored procedure giúp kiểm tra thông tin đăng nhập của user.

1. Insert data:

Ví dụ ở đây mình insert dữ liệu cho table RoleMaster đã thiết kế ở bài trước, mình tạo 3 tập quyền như bên dưới:

INSERT [dbo].[RoleMaster] ([RoleName], [DepartmentID], [PositionType], [Status], [CreateDate]) VALUES (1, N'IT Manager', NULL, 0, 1, GETDATE())

INSERT [dbo].[RoleMaster] ([RoleName], [DepartmentID], [PositionType], [Status], [CreateDate]) VALUES (2, N'HR Manager', NULL, 0, 1, GETDATE())

INSERT [dbo].[RoleMaster] ([RoleName], [DepartmentID], [PositionType], [Status], [CreateDate]) VALUES (3, N'Employee', NULL, 0, 1, GETDATE())

Lưu ý: Do cột RoleMasterID là khóa chính sinh tự động nên không cần khai báo

Ngoài cách viết trên, các bạn có thể tham khảo cách viết khác chỉ cần dùng 1 câu lệnh insert, mình hay viết theo cách này:

INSERT [dbo].[RoleMaster] ([RoleName], [DepartmentID], [PositionType], [Status], [CreateDate]) 
SELECT  N'IT Manager', NULL, 0, 1, GETDATE() UNION
SELECT  N'HR Manager', NULL, 0, 1, GETDATE() UNION
SELECT  N'Employee', NULL, 0, 1, GETDATE()

Tiếp theo, insert data cho RoleDetail:

Lưu ý, RoleMasterID chính là cột ID tự sinh sau khi insert data vào table RoleMaster.

INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (1, N'101')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (1, N'102')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (1, N'103')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (1, N'105')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (1, N'106')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (2, N'101')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (2, N'102')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (2, N'103')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (2, N'104')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (2, N'105')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (3, N'101')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (3, N'102')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (3, N'103')
INSERT [dbo].[RoleDetail] ([RoleMasterID], [RoleCode]) VALUES (3, N'105')

Nếu muốn kiểm tra user có quyền thực hiện chức năng nào đó hay không, thực thi sp như sau:

Các table khác các bạn thực hiện tương tự.

2. STORED PROCEDURE (SP) CHECK THÔNG TIN ĐĂNG NHẬP:

Sp sẽ thực hiện các chức năng sau:

  • • Kiểm tra thông tin mật khẩu, 
  • • User đang hoạt động hay đã bị xóa
  • • Kiểm tra quyền thực hiện 1 một chức năng cụ thể của user đó.

Các bạn xem SP mẫu bên dưới:

IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].[uspCheckEmployeeLogin]') AND OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [DBO].[uspCheckEmployeeLogin]
GO

CREATE PROCEDURE [dbo].[uspCheckEmployeeLogin]

	@EmployeeName varchar(64),
	@Password varchar(128) = NULL, 
	@RoleCode varchar(32) = NULL 
	
AS
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE @Return int, @tmpPassword varchar(88), @tmpStatus smallint, @tmpRoleMasterID int
	
SELECT @tmpPassword = Password, @tmpStatus = Status, @tmpRoleMasterID = RoleMasterID
FROM dbo.Employee 
WHERE EmployeeName = @EmployeeName
	
IF @Password IS NOT NULL AND @tmpPassword <> @Password
	RETURN -1 -- Mật khẩu không khớp
	
IF @tmpStatus = 0
	RETURN -2 -- User không hoạt ðộng
	
IF @RoleCode IS NOT NULL 
	AND NOT EXISTS (SELECT TOP 1 1 
				    FROM dbo.RoleMaster  with(nolock)
				    JOIN dbo.RoleDetail  with(nolock) ON RoleMaster.RoleMasterID = RoleDetail.RoleMasterID							
				    WHERE RoleDetail.RoleCode = @RoleCode
						  AND RoleDetail.RoleMasterID = @tmpRoleMasterID)
												
	RETURN -3 -- User không có quyền thực hiện chức nãng này


RETURN 1

GO

Ở đây, khi vi phạm một lỗi nào đó, chúng ta sẽ Return về 1 giá trị để thông báo. 

Lưu ý: 2 input @Password, @RoleCode sẽ có giá trị mặc định là NULL, mục đích khi truyền giá trị nào thì sp sẽ kiểm tra giá trị đó, không cần phải truyền giá trị cho tất cả input.

Mình tạo sẵn một dòng Employee như hình:

Ví dụ muốn kiểm tra password, thực thi sp như sau:

Nếu muốn kiểm tra user có quyền thực hiện chức năng nào đó hay không, thực thi sp như sau:

Trường hợp không khớp các bạn sẽ thấy kết quả như hình bên dưới:

Ngoài ra mình cũng lưu ý thêm, thông thường khi dựng hệ thống sẽ lưu password dưới dạng mã hóa, tuy nhiên do mục đích giới thiệu nên mình lưu tường minh để dễ theo dõi.

Đến đây cơ bản mình đã giới thiệu xong nội dung hôm nay, hi vọng giúp ích được các bạn.

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

AutoCode.VN

minhnhatict@gmail.com SQL Server