PDA

View Full Version : store procedure how to???



real_time
22-07-2004, 00:14
mình có một bảng là member(id,user,pass,.......) bây giờ mình muốn nhập vào bảng này nhưng với điều kiện là user ko được trùng nhau.
Yêu cầu: viết một store procedure insert vào bảng member nếu không insert được thì phải báo lỗi cảm ơn

InfernoVN
22-07-2004, 12:16
Hàm này thì không khó, muốn kiểm tra user đã có trong CSDL chưa - ta chỉ cần "giả bộ" update thông tin của user đó - và bắt lấy kết quả trả về. Nếu @@ROWCOUNT > 0 có nghĩa là user đã tồn tại trong hệ thống.

Hàm bên dưới sẽ trả về kết quả:
+ 0: User đã tồn tại trong hệ thống.
+ 1: User không tồn tại, và dữ liệu đã được INSERT thành công.

Enjoy it.

PS: Nhớ check lại syntax trong SQL Query Analyzer, vì tôi vừa suy nghĩ vừa viết => chưa chắc syntax đã đúng. :)
===================================
CREATE PROCEDURE Insert_Member
@Username VARCHAR(30),
@Password VARCHAR(30)
AS
DECLARE @Result TINYINT

SET @Result = 0

-- Kiểm tra xem đã có username chưa
UPDATE MemberTable SET Username = @Username WHERE Username = @Username

-- Nếu chưa có user nào thì insert dữ liệu vào
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO MemberTable (Username, Password) VALUES (@Username, @Password)
SET @Result = 1
END

RETURN @Result

GO

sontinh2004
22-07-2004, 13:56
Hello -

Mot cach khac cung kha don gian la dung EXISTS de xem record da ton tai chua:



CREATE PROCEDURE Insert_Member
@Username VARCHAR(30),
@Password VARCHAR(30),
.....................
AS
Declare @error_messgage varchar(50)

-- Kiểm tra xem đã có username chưa
IF EXISTS ( select password from MemberTable where username = @username)
--record da co roi, set error
set @error_messgage = 'RECORD ALREADY EXISTS'
ELSE
BEGIN
INSERT INTO MemberTable (Username, Password, .....) VALUES (@Username, @Password, .....)

set @error_messgage = 'SUCCESS'
END

--dong nay tuong tu nhu @Result ma Infer dung, nhung no se tra ve text thay ve number ... khong khac nhau lam, nhung tui co thoi quen sai text vi no de hieu cho tui hon =)
select @error_messgage AS error_message



Enjoy!

real_time
22-07-2004, 23:32
cảm ơn các bạn.
Mình xin hỏi thêm là có chuẩn nào quy định về viết các store Procedure SQL không?? mình mới làm về SP này nên nhiều chuyện thứ vẫn mơ hồ lắm mong các bạn chỉ giáo. Cảm ơn thêm một lần nữa.

KhungHai
23-07-2004, 06:21
Theo tôi, cách của bạn InfernoVN chưa đươc chính xác, bởi vì nó update trước khi thưc hiện một câu lệnh INsert. Dùng hàm If Exists là đúng nhất.

InfernoVN
23-07-2004, 23:52
Đúng là dùng EXISTS sẽ nhanh và code trông "clear" hơn cách của tôi viết. Tuy nhiên, dùng UPDATE vẫn không bị lỗi - vì thực ra đây không phải là thao tác UPDATE - mà chỉ gần như một "bẫy" để kiểm tra xem record đó đã tồn tại hay chưa thôi.

:)