Sql server 基于另一个表中的记录更新行中的列
在阅读我的问题之前,请先看下图 如果您无法查看上述图片,请单击链接查看数据库设计的图像和表数据 我想通过将列名(酒店)与便利设施(便利设施)匹配,用表“便利设施”中“状态”列中的值更新表“Hotels”中的“Parking、AC、TV、locallcalls”等列。 Hid是关联表的关键约束。 它就像一个转置。一个表中的行值应根据某些条件更新另一个表中的coulmns 请帮忙 我的桌子上有大约10000张唱片。如果我使用的是动态查询、游标或循环。执行速度非常慢,性能非常差 请帮忙 谢谢 我使用了子查询/动态查询。由于记录数为10000,因此速度非常慢Sql server 基于另一个表中的记录更新行中的列,sql-server,Sql Server,在阅读我的问题之前,请先看下图 如果您无法查看上述图片,请单击链接查看数据库设计的图像和表数据 我想通过将列名(酒店)与便利设施(便利设施)匹配,用表“便利设施”中“状态”列中的值更新表“Hotels”中的“Parking、AC、TV、locallcalls”等列。 Hid是关联表的关键约束。 它就像一个转置。一个表中的行值应根据某些条件更新另一个表中的coulmns 请帮忙 我的桌子上有大约10000张唱片。如果我使用的是动态查询、游标或循环。执行速度非常慢,性能非常差 请帮忙 谢谢 我使用
有没有其他方法可以更快地处理多个更新查询?我正在使用SQLServer2000。请帮助您可以使用内部select语句找到正确的值。。。所以对于停车场来说,它可能看起来像
UPDATE Hotel
SET
Parking = (SELECT Status FROM Amenity WHERE Amenity.hid = Hotel.hid AND Amenity.AmenityDesc = 'Parking')
对数据模型说几句话
我会将AmentityDesc重命名为Description(这使得amentity.Description…)
实体名称约定:hotel and Amentity->hotel and Amentity您可以使用内部select语句查找正确的值。。。所以对于停车场来说,它可能看起来像
UPDATE Hotel
SET
Parking = (SELECT Status FROM Amenity WHERE Amenity.hid = Hotel.hid AND Amenity.AmenityDesc = 'Parking')
对数据模型说几句话
我会将AmentityDesc重命名为Description(这使得amentity.Description…)
实体名称约定:hotel and Amency->hotel and Amency我不相信不借助动态SQL就可以通过单个查询实现这一点,因为列名是可变的,并且不能在T-SQL中使用变量表示列名 您可以使用一组带有子查询的单独查询来检索Yves M提到的数据,或者使用如下连接
UPDATE hotel
SET Parking = Amenity.Status
FROM hotel
JOIN Amenity ON Amenity.hid = hotel.hid
WHERE Amenity.AmenityDesc = 'Parking'
并对您希望更新的酒店中的每一列重复此操作。我不相信您可以在不使用动态SQL的情况下使用单个查询来完成此操作,因为列名是可变的,并且您不能在T-SQL中使用变量来表示列名 您可以使用一组带有子查询的单独查询来检索Yves M提到的数据,或者使用如下连接
UPDATE hotel
SET Parking = Amenity.Status
FROM hotel
JOIN Amenity ON Amenity.hid = hotel.hid
WHERE Amenity.AmenityDesc = 'Parking'
并对hotel中要更新的每个列重复此操作。您可以使用动态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
您可以使用动态sql为您生成update语句,手动运行它们,或者取消注释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个其他问题,但未接受任何答案。如果你接受更多,你可能会得到更高质量的答案。从课文中很难理解,你真正想要的是什么……你已经问了8个其他问题,但没有接受任何答案。如果你接受更多,你可能会得到更高质量的答案。从文本中很难理解,你真正想要的是什么。。。