2017-10-15 20 views
1

J'ai récemment migré du serveur sql vers mysql et j'ai de la difficulté à convertir mes procédures stockées sql en procédures stockées mysql. Ceci est ma procédure stockée SQL Server:Comment puis-je traduire ceci en mysql?

CREATE PROCEDURE dbo.GetGrades 
    @GradeId int = 0 
    ,@Name nvarchar(100) = '' 
AS 
BEGIN 
    SET NOCOUNT ON; 


    SELECT ISNULL(I.GradeId,0) as GradeId 
     ,ISNULL(I.Name, '') as Name 
     ,ISNULL(I.Details, '') as Details 
     ,ISNULL(I.StatId, 0) as StatId 
     ,ISNULL(I.CreatedById, 0) as CreatedById 
     ,ISNULL(U.UserName, '') as CreatedByName 
     ,ISNULL(I.CreatedOn, null) as CreatedOn 

    FROM Grades I 

     LEFT JOIN Users U ON U.UserId = I.CreatedById 

    WHERE (I.GradeId = @GradeId OR @GradeId = 0) 
     AND (I.Name LIKE '%' + @Name +'%' OR @Name = '') 
     AND I.StatId <> 2 

END 

GO 

Et ce que je l'ai fait jusqu'à présent dans la procédure de MySQL stockées:

DELIMITER $$ 

CREATE PROCEDURE GetGrades 
( 
    IN intGradeId INT 
    ,IN strName VARCHAR(1000)  
) 
BEGIN 
SELECT 
     gradeId 
    , gradeName 
    , details 
    , statId 
    , createdById 
    , createdOn 
FROM grades 
WHERE (gradeId = intGradeId OR intGradeId = 0) 
AND (gradeName LIKE '%' + strName +'%' OR strName = ''); 
END 

Quand j'exécute cela, voici le message d'erreur:

MySQL said: Documentation 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '+ strName +'%' OR strName = '') 
AND statId = 1; 
END' at line 16 

De même, existe-t-il une fonction ISNULL() dans mysql?

Répondre

2

Quelque chose comme ceci:

DELIMITER $$ 

CREATE PROCEDURE GetGrades ( 
    IN in_intGradeId INT, 
    IN in_strName VARCHAR(1000)  
) 
BEGIN 
    SELECT gradeId, gradeName, details, statId, createdById, createdOn 
    FROM grades 
    WHERE (gradeId = in_intGradeId OR in_intGradeId = 0) AND 
      (gradeName LIKE CONCAT('%', in_strName, '%') OR in_strName = ''); 
END;