2010-08-20 112 views
1

請在閱讀我的問題之前查看下面的圖像。根據另一張表中的記錄更新連續的列

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

回答

1

您cound內使用select語句來找到正確的價值觀......所以對於停車場它可能看起來像......

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

的幾句話給數據模型......

我會重新命名AmenityDesc到說明(這使得Amenity.Description ...)

實體名稱約定:酒店客房用品 - >酒店和美化

0

我不相信你可以用一個查詢來做到這一點而不訴諸動態SQL,因爲列名是可變的,你不能使用變量來表示T-Sql中的列名稱

你可以用一組與子查詢個人的查詢檢索數據由伊夫·M或有提到如下連接

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

,並重覆在酒店,要更新的每一列。

0

您可以使用動態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 
相關問題