2010-08-20 8 views
1

Veuillez lire l'image ci-dessous avant de lire ma question.Mettre à jour les colonnes d'affilée en fonction des enregistrements de l'autre table

Image

Si vous n'êtes pas en mesure de voir l'image ci-dessus, s'il vous plaît cliquez sur this lien pour voir l'image de la conception de base de données et les données de la table. Je souhaite mettre à jour les colonnes comme "Parking, AC, TV, appels locaux" dans le tableau "Hôtels" avec les valeurs de la colonne "Statut" dans le tableau "équipement" en faisant correspondre les noms de colonnes (Hôtel) avec AmenityDesc (en agrément). Hid est la contrainte clé pour relier les tables. C'est comme une Transpose. Les valeurs de ligne dans une table doivent mettre à jour les coulmns dans une autre table à certaines conditions.

Aidez-nous s'il vous plaît.

Ma table compte environ 10 000 enregistrements. si j'utilise la requête dynamique, le curseur ou la boucle. l'exécution est très lente et la performance est très mauvaise.

Aide de Pls.

Merci

J'ai utilisé les sous-requêtes/queries.Since dynamique le nombre d'enregistrements sont 10000 son très lent.

Existe-t-il un autre moyen de gérer plusieurs requêtes de mise à jour plus rapidement? J'utilise SQLServer 2000. Pls aide

+1

Vous avez demandé 8 autres questions, mais pas accepté les réponses . Vous pourriez obtenir des réponses de meilleure qualité si vous acceptez plus. –

+0

Du texte c'est assez difficile à comprendre, ce que vous voulez vraiment ... –

Répondre

1

Vous cound utiliser des instructions de sélection interne pour trouver les bonnes valeurs ... Donc, pour le champ de stationnement, il pourrait ressembler ...

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

Quelques mots au modèle de données ...

Je renommer AmenityDesc dans description (qui fait Amenity.Description ...)

convention nom de l'entité: hôtel et Équipement -> hôtel et Équipement

0

Je ne crois pas que vous pouvez le faire avec une seule requête sans avoir recours au SQL dynamique car les noms de colonnes sont variables et vous ne pouvez pas utiliser de variables pour représenter les noms de colonnes en T-SQL. requêtes individuelles avec les sous-requêtes pour récupérer les données mentionnées par Yves M ou JOIN comme suit

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

et répéter pour chaque colonne à l'hôtel que vous souhaitez mettre à jour.

0

Vous pouvez utiliser SQL dynamique pour générer les déclarations de mise à jour pour vous, et les lancer manuellement ou décommentez la ligne exec et les exécuter immédiatement

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 
Questions connexes