2009-09-03 5 views
0

Quelle est la meilleure technique pour obtenir des enregistrements associés par SP en utilisant un aller-retour db. J'ai besoin de créer une structure Master.List au niveau de l'application en C#.SQL Server SP façon optimale d'obtenir plusieurs curseurs avec des données connexes

J'ai des tables maître-détail: 1. J'ai besoin de rechercher des lignes dans le tableau de détail. 2. J'ai besoin de trouver les lignes correspondantes dans la table principale. 3. Je dois retourner deux curseurs: A: Toutes les lignes correspondantes de la table principale. B: Pour chaque ligne de la table principale tous les enregistrements de la table de détails.

Je peux le faire en utilisant la table en mémoire (pas trop d'enregistrements), est-ce bien?

DECLARE @MasterIds TABLE (Id uniqueidentifier) 

INSERT INTO @MasterIds (Id) 
    SELECT DISTINCT [MasterId] 
    FROM [Details] 
    WHERE [ColumnA] = 'Α' 

SELECT * 
    FROM [Master] 
    WHERE [Id] IN (SELECT * FROM @MasterIds) 

SELECT * 
    FROM [Detail] D 
    JOIN @MasterIds M 
    ON D.Id = M.Id 
+0

Voulez-vous vraiment dire "curseurs"? Votre code posté n'utilise pas de curseurs. –

+0

Désolé, je n'étais pas correct. Je voulais dire deux "ensembles de résultats". – HonzaCZE

Répondre

1

Je retourne régulièrement plusieurs enregistrements en un seul appel de procédure stockée

Dans votre cas, vous pouvez faire ce. Les variables de table sont utiles, mais ne s'adaptent pas bien.

SELECT * FROM [Master] M WHERE EXISTS (
     SELECT * FROM [Details] D WHERE D.[ColumnA] = 'Α' AND D.MasterId = m.iD) 

SELECT * FROM [Detail] D WHERE D.[ColumnA] = 'Α' 
1

En supposant que vous avez SQL2000 ou plus, je voudrais utiliser XML pour ce faire:

SELECT * 
FROM [Master] 
LEFT OUTER JOIN [Detail] 
ON [Detail].Id = [Master].Id 
WHERE [Master].[Id] IN (SELECT [MasterId] FROM [Details] WHERE [ColumnA] = 'Α') 
FOR XML AUTO 
Questions connexes