2016-08-26 1 views
-1

私は自分のアプリケーション用の新しいデスクトップログイントークンを作成するためのストアドルーチンを持っており、ユーザーが再ログインする必要があるかどうかを確認します。MySQL - IF EXISTSを使用すると私のステートメントが壊れているようです

重要なことは、使用しているSQLが私を好きにしていないことです。

私はデータベースのためのSSMSに焦点を当てていた.NET開発者ですので、私は唯一のこれまでT-SQLを使用しますが、今回は私が愚かなし経験XDここ

でMySQLを使用することにしましたが、コードです

CREATE PROCEDURE `insertNewToken`(IN `Username` VARCHAR(150), IN `Token` VARCHAR(500)) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 

IF EXISTS(SELECT * 
       FROM desktopTokens 
       WHERE desktopTokens.AssignedUsername = Username) THEN 
    BEGIN 
     UPDATE desktopTokens 
     SET desktopTokens.TokenValue = Token 
     WHERE desktopTokens.AssignedUsername = Username 
    END 
ELSE 
    BEGIN 
     INSERT INTO desktopTokens 
     VALUES 
     (Username, Token) 
    END 

私はLINE 2とLINE 15でエラーが発生し続けますが、理由はわかりません!

注:トークンとユーザー名が、SP変数です

+0

あなたはこのコードを実行する方法は差が 'PROCEDURE'ブロックを作成内側にこのコードを--Isのでしょうか?周囲の文脈をすべて投稿してください。 MySQLでは 'CREATE PROCEDURE/FUNCTION'以外の通常のSQL文で' IF/ELSE、BEGIN/END'を使用することはできません。 –

+0

確かに、今編集します。 – Astrify

+0

関連する場合、重複していない場合:[MySQLの "IF EXISTS"の使用法](http://stackoverflow.com/questions/5528854/usage-of-mysqls-if-exists) – Wondercricket

答えて

0

試してみてください。

DELIMITER $$ 
CREATE PROCEDURE `insertNewToken`(
    IN `Username` VARCHAR(150), 
    IN `Token` VARCHAR(500) 
) 
BEGIN 
    IF EXISTS(SELECT * 
      FROM desktopTokens 
      WHERE desktopTokens.AssignedUsername = Username) THEN 

     UPDATE desktopTokens 
     SET desktopTokens.TokenValue = Token 
     WHERE desktopTokens.AssignedUsername = Username 
     ; 
    ELSE 
     INSERT INTO desktopTokens 
     VALUES 
     (Username, Token) 
     ; 
    END IF; 
END $$ 
DELIMITER ; 
+0

それを作成しました。まだデータを挿入しようとしませんでしたが、うまくいくと思います。私はなぜMySQLを好きではないのか分かったので、私のプロジェクトをSQL Serverに移植します:)ありがとう – Astrify

関連する問題