to: icevi(按钮工厂) : 我曾经碰到一个问题,就以此贴为例吧,请看下面语句: --1 declare @mytable table (A int,B int) insert @mytable(a) values(10) insert @mytable(a) values(12) insert @mytable(a) values(14) insert @mytable(a) values(15) insert @mytable(a) values(16) update @mytable set b= (select sum(a) from @mytable t1 where t1.a<[email protected])--2 create table #mytable (A int,B int) insert #mytable(a) values(10) insert #mytable(a) values(12) insert #mytable(a) values(14) insert #mytable(a) values(15) insert #mytable(a) values(16) update #mytable set b= (select sum(a) from #mytable t1 where t1.a<=#mytable.a) drop table #mytable2通过,1提示“必须声明变量@mytable” 问题在:where t1.a<=#mytable.a 是什么原因?是不是又是SP2 ?
我也发现过类似的问题,应该不是BUG,可能是因为表变量的应用是受限制的。我不太记得以前出现这样的问题是怎么样的,好象是不能用@mytable.a这样的语句,一定要给它起个别名后再来引用,改成下面这样就可以了: update @mytable set b= (select sum(a) from @mytable t1 where t1.a<=t2.a) from @mytable t2比如以下的语句也不行: create.... insert....同上 select @mytable.a ,sysobjects.* from @mytable,sysobjects改成这样就好了: select t1.a ,sysobjects.* from @mytable t1,sysobjects
我是有个主键我现在把j9988(j9988)的方法改造了一下: CREATE TRIGGER SetDELETE ON [土地利用计划核算管理] FOR DELETE AS declare @i float declare @j float declare @year intset @year= (select 年代 from deleted)set @i=(select 建设项目占用农田地面积 from 土地利用年度计划管理 where 年代 = @year) set @j=(select 建设项目占用耕地面积 from 土地利用年度计划管理 where 年代 = @year)update 土地利用计划核算管理 set @i=@i-使用农用地面积,剩余农用地面积=@i,@j=@j-使用耕地面积,剩余耕地面积=@j where 年代 = @year 却出现“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.”的错误但是写insert和update的触发器却没有问题只是把“set @year= (select 年代 from deleted)”改为“set @year= (select 年代 from inserted)”请问是什么原因
set @i=(select 建设项目占用农田地面积 from 土地利用年度计划管理 where 年代 = @year) set @j=(select 建设项目占用耕地面积 from 土地利用年度计划管理 where 年代 = @year) 返回值多于一个,可能要用SUM: set @i=(select sum(建设项目占用农田地面积) from 土地利用年度计划管理 where 年代 = @year) set @j=(select sum(建设项目占用耕地面积) from 土地利用年度计划管理 where 年代 = @year)
CREATE TRIGGER SetDELETE ON [土地利用计划核算管理] FOR insert AS declare @i float declare @j float declare @year intset @year= (select 年代 from deleted) ---如果存在数据,修改 update b set 建设项目占用农田地面积 =a.建设项目占用农田地面积 +b.建设项目占用农田地面积 from select sum(建设项目占用农田地面积 )as 建设项目占用农田地面积 ,年代 from inserted group by 年代 ) a join b on a.年代 =b.年代 --如果没有,插入 insert into b(建设项目占用农田地面积 ,年代) select sum(建设项目占用农田地面积 )as 建设项目占用农田地面积 ,年代 from inserted a left join b on a.年代 =b.年代 where b.年代 is null group by a.年代
set @i=0
update mytable set B=@i,@i=@i+A
我曾经碰到一个问题,就以此贴为例吧,请看下面语句:
--1
declare @mytable table (A int,B int)
insert @mytable(a) values(10)
insert @mytable(a) values(12)
insert @mytable(a) values(14)
insert @mytable(a) values(15)
insert @mytable(a) values(16)
update @mytable set b=
(select sum(a) from @mytable t1 where t1.a<[email protected])--2
create table #mytable (A int,B int)
insert #mytable(a) values(10)
insert #mytable(a) values(12)
insert #mytable(a) values(14)
insert #mytable(a) values(15)
insert #mytable(a) values(16)
update #mytable set b=
(select sum(a) from #mytable t1 where t1.a<=#mytable.a)
drop table #mytable2通过,1提示“必须声明变量@mytable”
问题在:where t1.a<=#mytable.a
是什么原因?是不是又是SP2 ?
update @mytable set b=
(select sum(a) from @mytable t1 where t1.a<=t2.a)
from @mytable t2比如以下的语句也不行:
create....
insert....同上
select @mytable.a ,sysobjects.* from @mytable,sysobjects改成这样就好了:
select t1.a ,sysobjects.* from @mytable t1,sysobjects
CREATE TRIGGER SetDELETE ON [土地利用计划核算管理]
FOR DELETE
AS
declare @i float
declare @j float
declare @year intset @year= (select 年代 from deleted)set @i=(select 建设项目占用农田地面积 from 土地利用年度计划管理 where 年代 = @year)
set @j=(select 建设项目占用耕地面积 from 土地利用年度计划管理 where 年代 = @year)update 土地利用计划核算管理 set @i=@i-使用农用地面积,剩余农用地面积=@i,@j=@j-使用耕地面积,剩余耕地面积=@j where 年代 = @year
却出现“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.”的错误但是写insert和update的触发器却没有问题只是把“set @year= (select 年代 from deleted)”改为“set @year= (select 年代 from inserted)”请问是什么原因
set @j=(select 建设项目占用耕地面积 from 土地利用年度计划管理 where 年代 = @year)
返回值多于一个,可能要用SUM:
set @i=(select sum(建设项目占用农田地面积) from 土地利用年度计划管理 where 年代 = @year)
set @j=(select sum(建设项目占用耕地面积) from 土地利用年度计划管理 where 年代 = @year)
FOR insert
AS
declare @i float
declare @j float
declare @year intset @year= (select 年代 from deleted)
---如果存在数据,修改
update b set 建设项目占用农田地面积 =a.建设项目占用农田地面积 +b.建设项目占用农田地面积 from select sum(建设项目占用农田地面积 )as 建设项目占用农田地面积 ,年代 from inserted group by 年代 ) a join b on a.年代 =b.年代
--如果没有,插入
insert into b(建设项目占用农田地面积 ,年代)
select sum(建设项目占用农田地面积 )as 建设项目占用农田地面积 ,年代 from inserted a left join b on a.年代 =b.年代
where b.年代 is null
group by a.年代