根据另一张表中的记录更新连续的列
问题描述:
请在阅读我的问题之前查看下面的图像。根据另一张表中的记录更新连续的列
如果您无法看到上面的图片,请点击this链接以查看数据库设计和表数据的图像。
我希望通过将列名称(Hotel)与列名称(Hotel)相匹配来更新表格“Hotels”中的“Parking,AC,TV,locallcalls”列与来自“ AmenityDesc(舒适)。 Hid是关联表的关键约束条件。 它就像一个移调。一个表中的行值应该更新某些条件下其他表中的库仑值。
请帮忙。
我的表格有大约10,000条记录。如果我使用动态查询,游标或循环。执行速度很慢,性能非常差。
请帮忙。
感谢
我已经使用子查询/动态queries.Since记录的数量是10000的速度很慢。
是否有任何其他方式更快地处理多个更新查询?我使用SQLSERVER 2000请帮助
答
您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
你问过其他8个问题,但不接受任何答案。如果你接受更多,你可能会得到更好的质量答案。 – 2010-08-20 11:03:53
从文本中很难理解,你真的想要什么...... – 2010-08-20 11:11:57