2016-06-21 16 views
1

このSPをMsSQLで使用しました。どのように私はそれをMySqlに変換するのですか?@variableを使用してMSsQLをMySqlストアドプロシージャに変換する

構文エラーのため、プロシージャを作成できません。

(ReportId、UserName) - 変数に見つかった場合は、戻します。他の人が戻ってきます。アクセスが拒否されました。

ありがとうございました。

Procedure [dbo].[Permission] 
@ReportId As Int 
,@UserName As Varchar(50) 
As 
Declare 
    @Result As Varchar(250) 

Select 
    @Result = IsNull((
     Select 
      IsNull([permission].[Message], '') 

     From 
      [permission] 
      Join 
      [users] 
       On [users].[ID] = [permission].[User ID] 

     Where 
      [users].[User Name] = @UserName 
      And [permission].[Report ID] = @ReportId 
    ), 'Access denied') 


Select 
    Case 
     When @Result = '' Then 'Allowed' 
     Else @Result 
    End [Result] 

答えて

1

ない包括的なリストが、:

  • @シンボル、セッション変数のためであるそれらを削除します。代わりに、テーブルからのフィールド名とのあいまいさを防ぐために、それらをある種の標準化された接頭辞で置き換えることができます。
  • `
  • IsNull[]を交換して割り当てを行うときに、SELECT @Result = IsNull(...のように、;であなたの文を終了し、また、=

:=には変更 IfNull
  • になり、私はなぜこれほど多くの見当がつかないMSSQLユーザーはそれらをスキップするのが大好きです。

    一般的なproc構文の作成については、CREATE PROCEDUREを参照してください。

  • +0

    あまりにも役立ちました - 歓声! – joell

    0

    私は、MySQLの構文にあなたのSPを翻訳:

    DELIMITER $$ 
    DROP PROCEDURE if exists Permission$$ 
    CREATE PROCEDURE Permission(
        p_ReportId Int, 
        p_UserName Varchar(50) 
        ) 
    BEGIN 
        set @Result = ''; 
    
        set @Result = 
        coalesce(
         (Select 
          coalesce(permission.Message, '') 
         From permission Inner Join users 
          On users.ID = permission.`User ID` 
         Where 
          users.`User Name` = p_UserName 
          And permission.`Report ID` = p_ReportId) 
         , 'Access denied'); 
    
    
        Select 
         Case 
          When @Result = '' Then 'Allowed' 
          Else @Result 
         End as Result; 
    END $$ 
    
    delimiter ; 
    
    +0

    ありがとう、完璧に働いた! – joell

    +0

    @joell私の答えは「受け入れられる」とマークできますか?私の評判を向上させ、スタックオーバーフローのユーザーを助けるために役立ちます。 –

    関連する問題