0

我来自 MS SQL Server 背景。使用 MySQL 和 NaviCat 8 管理工具处理一个新项目。好的,这是问题。通常在 MS 领域工作时,如果我想更新一些数据,我会使用存储过程来执行此操作:

Drop Procedure spNew
Create Procedure spNew (@P_Param)

UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param

我正在尝试从 NaviCat 中执行相同的逻辑。我定义了参数,(IN '@P_Param' int)

在我放置的定义中:

BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = @P_Param
END;

当我尝试保存存储过程时,我收到此错误:“1064 - 您的 SQL 语法有错误,等等,等等,等等”

谁能至少指出我正确的方向?

谢谢。

4

2 回答 2

2
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;

请注意,MySQL语法和整体意识形态SQL Server.

您可能还需要设置分隔符:

DELIMITER $$

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;
$$

DELIMITER ;

顺便说一句,我假设您实际上并没有调用您的 table "Table",因为它是一个保留字。

如果这样做,则需要将其括在反引号中,如下所示:

DELIMITER $$

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE `Table`
     SET    `Field` = 'some value'
     WHERE  `ID` = P_Param;
END;
$$

DELIMITER ;
于 2009-10-28T17:43:40.680 回答
0

MySQL 存储过程的参数不以 @ 为前缀,也不在声明中或使用时引用。但是,局部变量以 @ 为前缀。

尝试:

DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param
END;
于 2009-10-28T17:50:14.383 回答