好的,这就是我尝试的。我可以毫无问题地执行此代码:
CREATE DEFINER=`dbname`@`%.domain.com` PROCEDURE `test4`(_sort character(2),
_start int, _page int, _seek varchar(64))
begin
select * from TABLE_OF_NAMES where
first_name like coalesce(concat('%', _seek, '%'), first_name) or
last_name like coalesce(concat('%', _seek, '%'), last_name)
and email in (select * from TempTable_emails)
order by
case when _sort = 'fa' then first_name end asc,
case when _sort = 'fd' then first_name end desc,
limit _start, _page;
end
现在我希望表 TempTable_emails 的名称应该是该过程的参数。我尝试以下方法:
CREATE DEFINER=`dbname`@`%.domain.com` PROCEDURE `test4`(_sort character(2),
_start int, _page int, _seek varchar(64), _tablename varchar(64))
begin
set @a = concat(' select * from TABLE_OF_NAMES where
first_name like coalesce(%', _seek, '%), first_name) or
last_name like coalesce(%', _seek, '%), last_name) and
email in (select * from ',_tablename,')
order by
case when \'',_sort,'\' = \'fa\' then first_name end asc,
case when \'',_sort,'\' = \'fd\' then first_name end desc,
limit _start, _page;');
prepare stmt1 FROM @a;
execute stmt1;
deallocate prepare stmt1;
end
但是,这只会产生错误“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 '%gauss%)、first_name) 或 last_name(如 coalesce(%NAME%) , last_name) 和 ' 在第 2 行"
我觉得我可能应该看看错误是什么,但我就是无法让它工作......有没有人马上看到我的错误是什么?
对于我想要实现的目标,是否有另一种(可能更容易)的解决方法?
谢谢!