【问题标题】:Convert MSsQL to MySql stored procedure using @variable使用 @variable 将 MSSQL 转换为 MySql 存储过程
【发布时间】:2016-10-23 14:16:30
【问题描述】:

我将此 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]

【问题讨论】:

    标签: mysql sql-server variables stored-procedures


    【解决方案1】:

    不完整的列表但是:

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

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

    对于一般的 create proc 语法,请转到CREATE PROCEDURE

    【讨论】:

      【解决方案2】:

      我将你的 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 ;
      

      【讨论】:

      • @joell 你能把我的回答标记为“已接受”吗?这将帮助我提高声誉并继续帮助 stackoverflow 用户。
      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多