Mysql 存储过程使用Cast()

yangpan010101 2010-06-24 11:52:54
delimiter //
CREATE PROCEDURE dnt_getuserlist()
begin
declare pagesize int;
declare pageindex int;
declare orderby varchar(200);
DECLARE pagetop int;
DECLARE `sql` varchar(1000);
SET pagetop = (pageindex-1)*pagesize;
IF pageindex = 1 then
SET `sql`= 'SELECT TOP ' + CAST(pagesize AS varchar(10)) + ' [dnt_users].[uid],
FROM [dnt_users] LEFT JOIN [dnt_userfields] ON [dnt_userfields].[uid] = [dnt_users].[uid] ' + orderby;
ELSE
SET `sql` = 'SELECT TOP ' + CAST(pagesize AS varchar(10)) + ' [dnt_users].[uid], [dnt_users].[username], [dnt_users].[nickname], [dnt_users].[joindate], [dnt_users].[credits], [dnt_users].[posts], [dnt_users].[email], [dnt_users].[lastactivity], [dnt_userfields].[location] FROM [dnt_users] LEFT JOIN [dnt_userfields] ON [dnt_userfields].[uid] = [dnt_users].[uid] WHERE [dnt_users].[uid] NOT IN (SELECT TOP ' + CAST(pagetop AS varchar(10)) + ' [uid] FROM [dnt_users] ' + orderby + ') '+ replace(orderby,'WHERE','AND');
END IF;
select `sql`;
call `sql`;
end;//

该存储过程在 CAST(pagesize AS varchar(10))附近报错,请问是哪里错了,mysql里不能这样写吗?
...全文
240 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2010-06-24
  • 打赏
  • 举报
回复
1、MYSQL 中字符中相加不是用+号,而是CONCAT()
2、MYSQL不需要做CAST,另外CAST函数的语法也和MS SQL SERVER也不同。
3、MYSQL中动态执行SQL语句用的是PREPARE/EXECUTE

具体语法说明你可以参考一下官方手册的说明和例子。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
ACMAIN_CHM 2010-06-24
  • 打赏
  • 举报
回复
mysql> delimiter //
mysql> CREATE PROCEDURE dnt_getuserlist()
-> begin
-> declare pagesize int;
-> declare pageindex int;
-> declare orderby varchar(200);
-> DECLARE pagetop int;
-> DECLARE `sql` varchar(1000);
-> SET pagetop = (pageindex-1)*pagesize;
-> IF pageindex = 1 then
-> SET `sql`= concat( 'SELECT TOP ' , pagesize , ' [dnt_users].[uid] FROM [dnt_users] LEFT JOIN [dnt_userfields] ON [dnt_userfields].[uid] = [dnt_users].[uid] ' , orderby);
-> ELSE
-> SET `sql` = concat('SELECT TOP ' , pagesize , ' [dnt_users].[uid], [dnt_users].[username], [dnt_users].[nickname], [dnt_users].[joindate], [dnt_users].[credits], [dnt_users].[posts], [dnt_users].[email], [dnt_users].[lastactivity], [dnt_userfields].[location] FROM [dnt_users] LEFT JOIN [dnt_userfields]ON [dnt_userfields].[uid] = [dnt_users].[uid] WHERE [dnt_users].[uid] NOT IN (SELECT TOP ' , pagesize , ' [uid] FROM [dnt_users] ' , orderby , ') ', replace(orderby,'WHERE','AND'));
-> END IF;
-> select `sql`;
-> set @sSQL=`sql`;
-> PREPARE stmt1 FROM @sSQL;
-> EXECUTE stmt1 ;
-> DEALLOCATE PREPARE stmt1;
->
-> end;//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql>

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧