-
08-07-2019 - |
题
我来自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;
不隶属于 StackOverflow