我来自MS SQL Server后台。 使用带有NaviCat 8 Admin工具的MySQL处理新项目。 好的,这是问题所在。 通常在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语法有错误,等等,等等,等等;

至少有人能指出我正确的方向吗?

感谢。

有帮助吗?

解决方案

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" ,因为它是一个保留字。

如果你这样做,你需要将它包含在这样的反引号中:

DELIMITER $

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

DELIMITER ;

其他提示

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top