0

私はMSSQLServerのバックグラウンドから来ています。NaviCat8管理ツールで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構文にエラーがあります、何とか、何とか、何とか」

誰かが少なくとも私を正しい方向に向けることができますか?

ありがとう。

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 に答える