2016-09-24 113 views
1

我已經將存儲過程從Sql Server遷移到Mysql,並且我已經使用phpmyadmin例程創建了,語法正常,但是當我執行存儲過程時,不會返回任何值。MySQL存儲過程沒有值檢索

DROP PROCEDURE `sp_buscar`; CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_buscar`(IN `@buscar` VARCHAR(50) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 

SELECT idColono AS Folio, nombreColono as Nombre, CONCAT(apellidoP ,' ', apellidoM) as Apellido, CONCAT(domicilio,' ', numero) as Dirección, numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT (@buscar, '%') 

在Sql Server中它沒有問題。

CREATE PROC sp_buscar 
@buscar VARCHAR(50) 
AS 
SELECT idColono AS Folio, nombreColono as Nombre, apellidoP +' '+ apellidoM as Apellido, domicilio+' '+ numero as Dirección, numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE @buscar + '%' 

出了什麼問題?

+0

向您展示mysql存儲過程不是來自sql svr的一個 – Drew

+0

@Drew第一個代碼來自Mysql,我使用了phpmyadmin的例程工具。讓我編輯它。 – Leinad

回答

1

解決方案!

DROP PROCEDURE `sp_buscar`; CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_buscar`(IN `buscar` VARCHAR(50) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 

SELECT idColono AS Folio, nombreColono as Nombre, 
     CONCAT(apellidoP ,' ', apellidoM) as Apellido, 
     CONCAT(domicilio,' ', numero) as Dirección, 
     numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT(buscar, '%') 

我剛剛從buscar變種刪除@和它的作品!

3

嘗試concat後除去空間:

SELECT idColono AS Folio, nombreColono as Nombre, 
     CONCAT(apellidoP ,' ', apellidoM) as Apellido, 
     CONCAT(domicilio,' ', numero) as Dirección, 
     numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT(@buscar, '%'); 

MySQL有與函數名後的空間解析的問題。

這相當不尋常的限制實際上是documented

默認情況下,必須有一個函數名和 它後面的括號之間沒有空格。這有助於MySQL解析器在函數調用和引用 以使其具有與函數相同的名稱的表或列之間區分 。但是,功能 參數周圍的空格是允許的。

而且有一個允許空格的系統參數。

+1

不應該報告爲錯誤嗎?太奇怪了。 – Rahul

+0

仍然無法正常工作,即使我試過這個** WHERE domicilio LIKE @ buscar **,沒有CONCAT,也沒有檢索值,是的,表格有500條記錄。無論如何謝謝你的男人。 – Leinad