SqlServerデータベース・ストレージ・プロシージャのMySqlデータベースへの移行で発生した問題

1819 ワード

SqlServerデータベースとMySqlデータベースのストレージ・プロシージャの構文が異なるため、ストレージ・プロシージャを移行する際に多くの詳細な問題に注意する必要があるため、1、転送パラメータを記録する:1 sqlserverストレージ・プロシージャの転送パラメータに@記号を付ける.例:
CREATE PROCEDURE [dbo].[Test]
        @ParmA VARCHAR(50),
        @ParmB INT

②myqslストアド・プロシージャのパラメータに@記号を付けない例:
create PROCEDURE Con_InsertDevicecontrollog(ParmA VARCHAR(50),ParmB INT)

2、ストレージプロセスの開始:sqlserverストレージプロセスの開始はBEGINの前にASがあり、ENDの終了後にGOがあり、mysqlの開始はASがなく、終了もGOがない.3、パラメータの宣言:1 sqlserverでパラメータを宣言すると、1行で宣言でき、@記号が付きます.
例:
DECLARE @a INT,@a INT

②mysqlでパラメータを宣言するには、各パラメータに@記号がなく、セミコロンで区切られたdeclare文を宣言する必要があります.
例:
DECLARE a INT;    
DECLARE b INT;    

4、パラメータの使用:mysqlでパラメータを宣言するときは@記号はありませんが、保存中に使用するときは@記号もありません.
5、if文:①sqlserverのif条件の文はBEGIN-ENDブロックに含めるべきである.例:
 IF @a IS NULL
                BEGIN
                    SELECT * FROM test_bable_a
                END 
                ELSE
                BEGIN 
                   SELECT * FROM test_bable_b
                END

②if文の後にthenで文ブロックの内容を実行し、BEGIN-ENDブロックに含めず、末尾にend ifを用い、最後にセミコロンを付けることに注意する.例:
IF (@a is NULL) then 
                    SELECT * FROM test_bable_a;
                ELSE
                    SELECT * FROM test_bable_b;
                end if;

6、注釈:
①sqlserverの行注記記号は--
②mysqlでの一方通行注釈も--ですが、後ろに必ずスペースがあることに注意してください.私は移行時にスペースを書いていません.注釈が効かなくて、半日ToTに困惑しました.
7、システムの現在時間を取得する:
1 sqlserverでシステムの現在時間を取得する関数はgetdate()である.
②mysqlでシステムの現在時刻を取得する関数はNOW()である.
8、ストレージプロセスを実行する:
①SqlServerはexec pro_name para1,para2
②mysqlはcall pro_name (para1,para2)
9、パラメータの使用:
①sqlserver既存のパラメータについては、すべて@記号で値付けと呼び出しを行えばよい.
②mysqlの格納プロセスは,付与時に@記号を用いる必要があるが,呼び出し時に@記号を付ける必要はない.