2016-06-21 83 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

我翻譯你的SP到MySQL語法:

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你能將我的答案標記爲「已接受」嗎?這將幫助我提高聲譽並繼續幫助用戶。 –