我已经将存储过程从Sql Server迁移到Mysql,并且我已经使用 phpmyadmin例程创建了,语法还可以,但是当我执行存储过程时,不会返回任何值。
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 + '%'
在Sql Server中,它没有问题。
{{1}}
有什么问题?
答案 0 :(得分: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 :(得分: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 var中删除了 @ ,它确实有效!