sql语法

xiaoqi7456 2012-12-20 02:40:46
UPDATE a SET a.ndhsl=CASE 
WHEN a.ndhsl>a.ntpbzl and a.ntpbzl>b.sl-a.ndhsl+(a.ndhsl%a.ntpbzl)
THEN (SELECT b.sl FROM #15 b WHERE a.sspbh=b.sspbh)
WHEN ndhsl>ntpbzl AND ntpbzl<b.sl-ndhsl+(a.ndhsl%a.ntpbzl)
THEN (CONVERT(int,ndhsl/ntpbzl)*a.ntpbzl+a.ntpbzl)
WHEN ndhsl<ntpbzl AND ntpbzl>b.sl
THEN (SELECT a.sl FROM #15 a WHERE a.sspbh=sspbh)
WHEN ndhsl<ntpbzl AND ntpbzl<b.sl
THEN ntpbzl END FROM #12 a,#15 b
WHERE a.px=1 AND a.sspbh=b.sspbh


报错消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

请问怎么改?
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy1987316 2012-12-20
  • 打赏
  • 举报
回复
在子查询中返回了多个值。用个TOP 1吧
yiyishuitian 2012-12-20
  • 打赏
  • 举报
回复
既然语句中有的返回多行,说明两个问题 第一:你的语句是不对的,你对你要更新的数据条数不是百分百掌控. 第二:要解决的话,先从逻辑开始.如果觉得多条返回不影响数据的话.那么你可以使用 top 1 ,max,sum之类的聚合.
guguda2008 2012-12-20
  • 打赏
  • 举报
回复
SELECT b.sl FROM #15 b WHERE a.sspbh=b.sspbh SELECT a.sl FROM #15 a WHERE a.sspbh=sspbh 这两句肯定有返回多行的记录
Oraclers 2012-12-20
  • 打赏
  • 举报
回复
(SELECT b.sl FROM #15 b WHERE a.sspbh=b.sspbh) 就是这个你返回的值不只一条记录,所以出错。改成: (SELECT top 1 b.sl FROM #15 b WHERE a.sspbh=b.sspbh) 试试。 其他子查询作相应改动。
daishaodong 2012-12-20
  • 打赏
  • 举报
回复
子查询返回值过多吧,逐一改下语句试试。。
开启时代 2012-12-20
  • 打赏
  • 举报
回复
UPDATE a SET a.ndhsl=CASE WHEN a.ndhsl>a.ntpbzl and a.ntpbzl>b.sl-a.ndhsl+(a.ndhsl%a.ntpbzl) THEN (SELECT top 1 b.sl FROM #15 b WHERE a.sspbh=b.sspbh) WHEN ndhsl>ntpbzl AND ntpbzl<b.sl-ndhsl+(a.ndhsl%a.ntpbzl)THEN (CONVERT(int,ndhsl/ntpbzl)*a.ntpbzl+a.ntpbzl)WHEN ndhsl<ntpbzl AND ntpbzl>b.slTHEN (SELECT top 1 a.sl FROM #15 a WHERE a.sspbh=sspbh)WHEN ndhsl<ntpbzl AND ntpbzl<b.slTHEN ntpbzl END FROM #12 a,#15 b WHERE a.px=1 AND a.sspbh=b.sspbh

34,590

社区成员

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

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