mysql - 如何将SQL Server程序转换为MySQL?

标签 mysql sql sql-server stored-procedures

如何将以下代码转换为与 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/

相关文章:

mysql - 这个 MySQL 查询是否总是返回预期的结果?

营业时间 SQL

sql - 无法将 varchar 转换为 float

SQL Server 按日期和日期范围内的一天中的时间分组

MySQL:命令行与 phpMyAdmin

mysql - mysql 语法错误 - 插入查询

mysql - 构建具有多个内连接的 SQL 查询的最佳方法?

MySQL 到 SQL Server 2014

.net - SQL Server View 可以有主键和外键吗?

ASP.NET FormView 更新失败