使用@variable将MSsQL转换为MySql存储过程

时间:2016-06-21 20:59:15

标签: mysql sql-server variables stored-procedures

我将这个SP与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]

2 个答案:

答案 0 :(得分:1)

不是全面的清单,但是:

  • 删除@符号,这些符号用于会话变量;或者,您可能希望用某种标准化的前缀替换它们,以防止表格中的字段名称存在歧义。
  • []替换为“
  • IsNull变为IfNull
  • 在执行作业时,如SELECT @Result = IsNull(...,将=更改为:=

另外,用;结束你的陈述,我不知道为什么有这么多MSSQL用户喜欢跳过它们。

对于常规create proc语法,请转到CREATE PROCEDURE

答案 1 :(得分: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 ;