![](/img/trans.png)
[英]MYSQL Stored Procedure - Update multiple columns if certain conditions are met
[英]mysql multiple stored procedure update
我遇到了一些mysql updateusers存儲過程的問題,如下所示:
DELIMITER go
Create procedure updateusers(
IN UserID tinyint(11),
IN FirstName varchar(30),
IN LastName varchar(30),
IN Password varchar(30),
IN EmailAddress varchar(30),
IN Salt varchar(40),
IN RoleID varchar(1))
BEGIN
update users
set
FirstName = FirstName
where UserID = UserID
End
BEGIN
update users
set
LastName = LastName
where UserID = UserID
End
BEGIN
update users
set
Password = Password
where UserID = UserID
End
BEGIN
update users
set
EmailAddress = EmailAddress
where UserID = UserID
End
BEGIN
update users
set
Salt = Salt
where UserID = UserID
End
BEGIN
update users
set
RoleID = RoleID
where UserID = UserID;
End
go
DELIMITER ;
我在第16行得到一個錯誤:
MySQL說:文檔#1064 - 你的SQL語法有錯誤; 查看與您的MySQL服務器版本對應的手冊,以便在附近使用正確的語法
'End BEGIN update users set LastName = LastName where UserID = Us' at line 16
然后我會使用這樣的調用存儲過程:
call updateusers(3,'John','Jamieson','dsd','jamie@gmail.com','abac123','U')
我希望獲得的輸出是,例如,如果我想從以下更新:
UserId FirstName LastName Password EmailAddress Salt RoleID
3 John Smith abc john@gmail.com 123 U
對此:
UserId FirstName LastName Password EmailAddress Salt RoleID
3 John Jamieson dsd jamie@gmail.com abac123 U
要么
UserId FirstName LastName Password EmailAddress Salt RoleID
3 Aaron Smith abc john@gmail.com 123 A
不可否認,MySQL存儲過程的文檔從未如此出色。 沒有足夠的例子。
在你的情況下,我會寫這樣的程序:
DELIMITER go
CREATE PROCEDURE updateusers(
IN inUserID tinyint,
IN inFirstName varchar(30),
IN inLastName varchar(30),
IN inPassword varchar(30),
IN inEmailAddress varchar(30),
IN inSalt varchar(40),
IN inRoleID varchar(1))
BEGIN
UPDATE users
SET
FirstName = inFirstName,
LastName = inLastName,
Password = inPassword,
EmailAddress = inEmailAddress,
Salt = inSalt,
RoleID = inRoleID
WHERE UserID = inUserID;
END
go
DELIMITER ;
變化:
UPDATE
更新多個列。 實際上,您應該這樣做,因此您只需要運行一個查詢來查找要更新的行。 BEGIN...END
,只需要在語句塊周圍,類似於在許多編程語言中使用花括號的方式。 UPDATE
語句。 tinyint(11)
改為tinyint
。 長度參數不起作用。 閱讀我對MySQL中的類型的回答:BigInt(20)vs Int(20)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.