根据另一张表中的记录更新连续的列

问题描述:

请在阅读我的问题之前查看下面的图像。根据另一张表中的记录更新连续的列

Image

如果您无法看到上面的图片,请点击this链接以查看数据库设计和表数据的图像。

我希望通过将列名称(Hotel)与列名称(Hotel)相匹配来更新表格“Hotels”中的“Parking,AC,TV,locallcalls”列与来自“ AmenityDesc(舒适)。 Hid是关联表的关键约束条件。 它就像一个移调。一个表中的行值应该更新某些条件下其他表中的库仑值。

请帮忙。

我的表格有大约10,000条记录。如果我使用动态查询,游标或循环。执行速度很慢,性能非常差。

请帮忙。

感谢

我已经使用子查询/动态queries.Since记录的数量是10000的速度很慢。

是否有任何其他方式更快地处理多个更新查询?我使用SQLSERVER 2000请帮助

+1

你问过其他8个问题,但不接受任何答案。如果你接受更多,你可能会得到更好的质量答案。 – 2010-08-20 11:03:53

+0

从文本中很难理解,你真的想要什么...... – 2010-08-20 11:11:57

您cound内使用select语句来找到正确的价值观......所以对于停车场它可能看起来像......

UPDATE Hotel 
SET 
Parking = (SELECT Status FROM Amenity WHERE Amenity.hid = Hotel.hid AND Amenity.AmenityDesc = 'Parking') 

的几句话给数据模型......

我会重新命名AmenityDesc到说明(这使得Amenity.Description ...)

实体名称约定:酒店客房用品 - >酒店和美化

我不相信你可以用一个查询来做到这一点而不诉诸动态SQL,因为列名是可变的,你不能使用变量来表示T-Sql中的列名称

你可以用一组与子查询个人的查询检索数据由伊夫·M或有提到如下连接

UPDATE hotel 
SET Parking = Amenity.Status 
FROM hotel 
JOIN Amenity ON Amenity.hid = hotel.hid 
WHERE Amenity.AmenityDesc = 'Parking' 

,并重复在酒店,要更新的每一列。

您可以使用动态sql为您生成更新语句,并可以手动运行它们或取消对EXEC线,让他们立即运行

create table #amenity (amenitydesc nvarchar(50)) 
insert into #amenity(amenitydesc) select distinct amenitydesc from Amenity 
declare @amenity nvarchar(50) 
declare @sql nvarchar(max) 
select @amenity = min(amenitydesc) from #amenity 
while @amenity is not null 
begin 
    select @sql = 'update hotel set ' + @amenity + ' = amenity.status from amenity join hotel on amenity.hid = hotel.hid where amenity.amenityDesc = ''' + @amenity + '''' 

    --exec(@sql) 
    select @sql 

    select @amenity = min(amenitydesc) from #amenity where amenitydesc > @amenity 
end