日期:2014-05-19  浏览次数:20569 次

這樣的sql語句怎麼寫?
有兩個表a,b,根據a表中的groupid   state=1   任意選n條記錄插入倒b表中,然後更新table   a   這n條記錄的狀態為0。
table   a
id     name         groupid     state
1       model1           1               1      
2       model2           1               1
3       model3           1               1
4       model4           1               0
5       model5           2               1
6       model6           2               0
7       model7           2               0
8       model8           2               1
9       model9           2               1

table   b
bid   id

bid   為自增列



------解决方案--------------------
"groupid state=1 " groupid state=1都要为1么 ?
------解决方案--------------------
可以先更新,后插入

先在a上创建update触发器
create trigger up_a
for update
as
if update(state)
begin
insert b(id)
select id from deleted
end
go


随机更新3条记录:
update #temp
set state=0
where id in(select top 3 id from #temp where state=1 order by newid())

------解决方案--------------------
Insert b Select Top 3 id From A Where groupid = 1 And state = 1 Order By NewID()

Update A Set state = 1
From A
Inner Join B
On A.id = B.id

Or

Insert b Select Top 3 id From A Where state = 1 Order By NewID()

Update A Set state = 1
From A
Inner Join B
On A.id = B.id
------解决方案--------------------
create table a(id int,name varchar(20) ,groupid int ,state int )
create table b(bid int identity(1,1),id int )

drop table a

可以用个触发器
create trigger tr_1 on a
for update
as
if (select groupid from inserted) =1 and (select state from inserted) =1
insert into b select id from inserted
update a set state=0 where id=(select id from inserted)


go

insert into a
select 1, 'model1 ',1,0

select * from a
select * from b

update a set state=1 where id=1


不知道理解有没有错误

------解决方案--------------------
rookie_one(流氓会武术,谁都挡不住
你好象没重新更新a state=0
我学的不好 写的比较冗杂
create trigger tr_1 on a
for update
as
if (select state from inserted) =1
insert into b select id from inserted
update a set state=0 where id=(select id from inserted)
go

------解决方案--------------------
跟上面的差不多
create trigger tr_b on a
for update
as
if update(state)
begin