mysql - 尝试将 SQL Server 转换为 MySql 进行类(class)

标签 mysql stored-procedures syntax

我正在尝试将老师给出的 SQL Server 中的代码转换为 MySQL。它最终应该允许我将信息输入到制作的表格中。这是一份留言簿作业。不幸的是,我找不到正确的语法,因为我以前从未接触过一般的 SQL 编程。

我尝试使用括号、分号和逗号来表示信息,并添加一个分隔符来消除最初在编程中出现的“无法识别的语句类型(靠近 PROCEDURE)”错误消息。

教师代码:

CREATE PROCEDURE spInsertGuestbookEntry
 @GuestBookName varchar(200),
 @GuestBookEntry ntext,
 @GuestbookEmail varchar(200),
 @GuestBookIP varchar(20)

AS
BEGIN
    SET NOCOUNT ON;

INSERT INTO Guestbook 
 (GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
VALUES
 (@GuestbookName, @GuestBookEntry, @GuestbookEmail, @GuestBookIP, GetDate())
END
GO

我的修改:

DELIMITER $$
CREATE PROCEDURE spInsertGuestbookEntry
 @GuestBookName varchar(200)
 @GuestBookEntry text
 @GuestbookEmail varchar(200)
 @GuestBookIP varchar(20)
 @GuestBookDate date

AS
BEGIN
    SET NOCOUNT ON;

INSERT INTO Guestbook 
 (GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
VALUES
 (@GuestbookName, @GuestBookEntry, @GuestbookEmail, @GuestBookIP, @GuestBookDate)
END 
GO

我收到的错误消息是“无法识别的数据类型。(near))”该错误消息是由 @GuestBookName varchar(200) 发出的

最佳答案

DELIMITER $$

CREATE PROCEDURE `spInsertGuestbookEntry`(
    IN `str_GuestBookName` VARCHAR(200),
    IN `str_GuestBookEntry` TEXT,
    IN `str_GuestbookEmail` VARCHAR(200),
    IN `str_GuestBookIP` VARCHAR(20)
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
    INSERT INTO Guestbook 
    (GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
    VALUES
    (str_GuestBookName, str_GuestBookEntry, str_GuestbookEmail, str_GuestBookIP, CURRENT_DATE());
END

$$

需要考虑的要点:

  • 区分表column_name过程输入参数
  • @ 用于在 MySQL 中创建用户定义变量,如果调用过程时参数的类型为 OUT/INOUT,则应该使用此变量。
  • 在过程/函数创建中,使用简单的变量名称,而不是使用@符号,否则在使用这些参数时,MySQL将查找具有该名称的变量,而不是输入参数。

关于mysql - 尝试将 SQL Server 转换为 MySql 进行类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659792/

相关文章:

mysql - 使用带有两个字段的 INNER JOIN 时过滤 mysql 上的大量记录

c# - 用于将脚本添加到布局页脚的 Razor 语法

ruby - 将符号传递给 block 方法

javascript - 关于 Angularjs OrderBy 与数字的想法? 10 被视为小于 2

mysql - 无法使用 psycopg2 在 postgres 中创建临时表

mysql 性能 - mysqltuner

c++ - 为什么 cin 命令在缓冲区中留下 '\n'?

php - 检查 PHP 或 MySQL 中的一个数字范围是否在另一个范围内

.net - Visual Studio 2003 的 VARCHAR(MAX) SqlParameter 输出大小

MySQL存储过程从表中获取特定用户id的完整数据