如果条件在一个表中为真,我必须插入多个表,即
表
Person
tableID PersonUniqueNumber
1 123
2 1234
3 121
4 12
5 113333
和另一张表
RentedHousesDetail
HouseId(tableId) HouseName HouseLocation ISOK
1 A CA NO
2 B DT NULL
3 C NY NULL
4 D CA
5 E CA
和其他表格
表 加利福尼亚州
表 STATUSGREEN
所以,我要做的是对于每个人,我必须看看他在RentedHousesDetail中的房屋位置是否为CA然后我必须在表CALIFORNIAHOUSE和STATUSGREEN中单行插入RentedHousesDetail.ID并更新RentedHousesDetail.ISOK列没有。
表中有数千行,所以我写了一个光标,例如
DECLARE variables
DECLARE cursorName CURSOR -- Declare cursor
LOCAL SCROLL STATIC
FOR
select PERSON.ID of those rows only where we have CA in RentedhouseDetails
OPEN cursorName -- open the cursor
FETCH NEXT FROM cursorName
INTO variables
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM cursorName
FOR EACH ROW that we have from cursor, insert into CALIFORNIAHOUSE and STATUSGREEN and update RentedHousesDetail.ISOK to NO
END
CLOSE cursorName -- close the cursor
DEALLOCATE cursor
请告诉我在Person和Rentedhousedetails表中的数千行上使用游标是否可以?如何将其转换为基于设置的速度操作?
答案 0 :(得分:2)
我认为这里不需要使用游标。 首先,只有在RentedhouseDetails中有CA的位置才能选择那些行的PERSON.ID 像
select p.id from Person p JOIN RentedHousesDetail r ON p.ID=r.ID
where r.HouseLocation='CA'
然后将所有记录插入CALIFORNIAHOUSE和STATUSGREEN表
喜欢这个
Insert into CALIFORNIAHOUSE
select p.id from Person p JOIN RentedHousesDetail r ON p.ID=r.ID
where r.HouseLocation='CA'
和
Insert into STATUSGREEN
select p.id from Person p JOIN RentedHousesDetail r ON p.ID=r.ID
where r.HouseLocation='CA'
AND最后更新表RentedHousesDetail,其中HouseLocation =' CA' as' NO'
像这样update RentedHousesDetail set ISOK='NO' from Person p JOIN RentedHousesDetail r ON p.ID=r.ID
where r.HouseLocation='CA'
答案 1 :(得分:1)
如果你使用临时表,那很简单。没有理由为此使用游标,并且以下性能应超过基于游标的解决方案。
显然,您需要填写伪代码的空白。
localhost:8080