如何将以下代码转换为与 MySQL 一起使用?我对 MySQL 有点熟悉,但对 SQL Server 不太熟悉。
create procedure spInsertAccount
(
@AccountID INT,
@InUse bit,
@IsBanned bit,
@IsPremium bit,
@IsGolden bit,
@Username VARCHAR(20),
@Password VARCHAR(20),
@Email VARCHAR(65),
@LoggedInID INT,
@CreateDate DATETIME
)
AS
BEGIN TRANSACTION
IF NOT EXISTS( SELECT * FROM Accounts WHERE AccountID = @AccountID)
BEGIN
INSERT INTO Accounts
values(@AccountID,@InUse,@IsBanned,@IsPremium,@IsGolden,@Username,@Password,@Email,@LoggedInID,@CreateDate)
select @@IDENTITY as [NewAccountID]
END
IF @@ERROR = 1
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
最佳答案
除了基本语法约定之外,您还测试记录是否存在,如果不存在则执行插入。这被包装在事务中,以确保条件和插入“看到”数据库的相同图片。
在这两个数据库中,您可以通过执行以下操作来消除事务:
INSERT INTO Accounts(AccountID, InUse, IsBanned, IsPremium, IsGolden, Username, Password,
Email, LoggedInID, CreateDate
)
select @AccountID, @InUse, @IsBanned, @IsPremium, @IsGolden, @Username, @Password,
@Email, @LoggedInID, @CreateDate
where NOT EXISTS( SELECT * FROM Accounts WHERE AccountID = @AccountID);
接下来,我对这个语句有两个问题:select @@IDENTITY as [NewAccountID]
。
首先,这表明您有一个标识列(在 MySQL 中为 auto_increment
)。但是,您没有在 insert
语句中列出列。这意味着您可能在 MS SQL 中遇到错误,因为您(通常)无法将值插入到标识列中。无论如何,一如既往的好习惯,我在插入中列出了所有列。
其次,你从不使用该值。因此,只需删除该语句即可。
通过这些更改,MS SQL 过程主体变为:
as begin
INSERT INTO Accounts(AccountID, InUse, IsBanned, IsPremium, IsGolden, Username, Password,
Email, LoggedInID, CreateDate
)
select @AccountID, @InUse, @IsBanned, @IsPremium, @IsGolden, @Username, @Password,
@Email, @LoggedInID, @CreateDate
where NOT EXISTS( SELECT * FROM Accounts WHERE AccountID = @AccountID);
end;
这消除了我认为转换中棘手的部分。实际上从这里用 MySQL 语法编写这个应该很容易。
关于mysql - 如何将SQL Server程序转换为MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256828/