更新表时,发生错误,望各位多多指点.

昵称已存在0826 2009-03-14 09:54:44
在一张表中,关键字为(DI_ID,EI_ID_Outer,EI_ID_Inner,DC_Outdate),要更新另外两个字段(DC_Innerconfirm和DC_Confirmdate把空变成其他数据),执行下面的存储过程时发生错误.
Create produce p_dc_confirm
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate smalldatetime,@Confirmdate smalldatetime)
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = @Confirmdate
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=@Outdate
end
错误信息如下:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
请问各位高手,这种情况应该怎么解决?小弟先谢谢大家了.
...全文
80 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
非常感谢您的回答,还是报了那个错误.回不回我在那个字段上建立的那个更新出发器影响的?触发器的代码在8楼再次感谢!
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yp314311 的回复:]
多谢您的回答,改成那样也没办法更新.
我在这个表上对DC_Confirmdate字段建立了一个更新触发器,会不会这个触发器的影响?

SQL code
ALTER trigger t_DC_update
on DC for update
as
if update(DC_Confirmdate)
begin
declare @EID varchar(6),@DID varchar(8),@Department varchar(15),@Indate smalldatetime

update EI_DI
SET DI_Backdate=(select DC_Outdate from inserted) where EI_ID= (select EI_ID_Outer f…
[/Quote]没影响,一样会触发。试试吧。
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
alter proc p_dc_confirm 
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate varchar(20),@Confirmdate varchar(20))
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = cast(@Confirmdate as datetime) --sorry,补括号
from DC
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=cast(@Outdate as datetime)
end
  • 打赏
  • 举报
回复
多谢您的回答,改成那样也没办法更新.
我在这个表上对DC_Confirmdate字段建立了一个更新触发器,会不会这个触发器的影响?

ALTER trigger t_DC_update
on DC for update
as
if update(DC_Confirmdate)
begin
declare @EID varchar(6),@DID varchar(8),@Department varchar(15),@Indate smalldatetime

update EI_DI
SET DI_Backdate=(select DC_Outdate from inserted) where EI_ID= (select EI_ID_Outer from inserted)
select @EID = EI_ID_Inner from inserted
select @DID = DI_ID from inserted
select @Department =(select EI_Department from EI where EI_ID=@EID)
select @Indate = DC_Confirmdate from inserted

exec p_EI_DI_INS @EID,@DID,@Department,@Indate, Null --调用存储过程

end
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
alter proc p_dc_confirm 
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate varchar(20),@Confirmdate varchar(20))
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = cast(@Confirmdate as datetime
from DC
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=cast(@Outdate as datetime)
end
如果不行,再这样。
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
alter proc p_dc_confirm 
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate varchar(20),@Confirmdate varchar(20))
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = @Confirmdate
from DC
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=@Outdate
end
这样试试。
  • 打赏
  • 举报
回复
输入的是'2009-3-6 0:00:00'和'2009-3-6'两种格式都用了,还是没成功.
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
我也是没看出什么错误,在调试时关键字produce 要用 proc
dawugui 2009-03-14
  • 打赏
  • 举报
回复
仅从这段代码来看,没看出有什么错误.

Create produce p_dc_confirm 
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate smalldatetime,@Confirmdate smalldatetime)
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = @Confirmdate
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=@Outdate
end


或者改为这样:

Create produce p_dc_confirm 
(@DID varchar(8),@EIDO varchar(6),@EIDI varchar(6),@Outdate smalldatetime,@Confirmdate smalldatetime)
as
begin
update DC
set
DC_Innerconfirm='已收',DC_Confirmdate = @Confirmdate
from DC
where DI_ID=@DID AND EI_ID_Outer=@EIDO AND EI_ID_Inner=@EIDI AND DC_Outdate=@Outdate
end
htl258_Tony 2009-03-14
  • 打赏
  • 举报
回复
@Confirmdate 这个你外面输入的内容是什么?
  • 打赏
  • 举报
回复
补充一下,如果把更新字段,DC_Confirmdate = @Confirmdate 去掉的话,执行没有问题.
单独更新DC_Confirmdate也会出现上面的错误.

22,219

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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