求大神帮忙看看为什么这个CASE不正确

ruancan 2014-01-16 08:18:25
CREATE PROC addtimetable(@number INT) AS
DECLARE @i INT;
SET @i=0;
WHILE @i<@number
BEGIN
CASE
WHEN CAST(CEILING(RAND(CHECKSUM(NEWID()))*10) AS INT)%2=0
THEN
INSERT INTO timetable VALUES ('1', '2', '3', '4', '5', '6')
ELSE
INSERT INTO timetable VALUES ('1', '2', '3', '7', '8', '9')
END CASE
SET @i=@i+1
END

报错信息:
[Err] 42000 - [SQL Server]关键字 'CASE' 附近有语法错误。
42000 - [SQL Server]关键字 'ELSE' 附近有语法错误。
42000 - [SQL Server]关键字 'CASE' 附近有语法错误。
42000 - [SQL Server]'END' 附近有语法错误。


...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2014-01-16
  • 打赏
  • 举报
回复
1、Case When 一般用于赋值语句;
2、End Case 也有语法问题;

eg.

CREATE PROC addtimetable(@number INT) AS
DECLARE @i INT;
DECLARE @sql varchar(2000)
set @sql=''
SET @i=0;
WHILE @i<@number
BEGIN
  set @sql=
   CASE 
   WHEN  CAST(CEILING(RAND(CHECKSUM(NEWID()))*10) AS INT)%2=0   
   THEN   
         'INSERT INTO timetable VALUES (''1'', ''2'', ''3'', ''4'', ''5'', ''6'')'
   ELSE  
         'INSERT INTO timetable VALUES (''1'', ''2'', ''3'', ''7'', ''8'', ''9'')'
   END --CASE
   exec(@sql)
SET @i=@i+1
END
發糞塗牆 2014-01-16
  • 打赏
  • 举报
回复
如果要用case when实现的话,要用拼接SQL的方式
LongRui888 2014-01-16
  • 打赏
  • 举报
回复
改成这样试试: sql server中没有case - when语句,只有case - when表达式,两个是不一样的。 修改了一下,用if-else实现

CREATE PROC addtimetable(@number INT) AS
DECLARE @i INT;
SET @i=0;

WHILE @i<@number
BEGIN
   if CAST(CEILING(RAND(CHECKSUM(NEWID()))*10) AS INT)%2=0     
         INSERT INTO timetable VALUES ('1', '2', '3', '4', '5', '6')
   ELSE  
         INSERT INTO timetable VALUES ('1', '2', '3', '7', '8', '9')

   SET @i=@i+1
END

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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