2009-09-16 7 views
2

Il m'a été demandé de suivre le nombre de fois où chaque élément apparaissait dans les résultats d'une requête particulière. Ma pensée est de simplement stocker le résultat d'une requête dans une table de suivi et ensuite cracher les résultats à l'appelant. Je me demande quelle serait la méthode la plus efficace pour stocker ces résultats puisque l'ensemble de résultats pourrait inclure jusqu'à 1000 enregistrements.SQL Server - Stockage efficace des résultats d'une requête dans une table de suivi

Mon plan est d'extraire les résultats de la requête dans une table temporaire et d'insérer ces résultats dans la table de suivi, puis de renvoyer la table temporaire à la suite du SPROC. Quelque chose comme ceci:

DECLARE @QueryTime datetime 
SET @QueryTime = GETDATE() 

DECLARE @Results TABLE (X nvarchar(255), Y nvarchar(255)) 

INSERT INTO @Results 
SELECT X,Y FROM TableA 

INSERT INTO TableB 
SELECT X, @QueryTime FROM @Results 

SELECT X, Y FROM @Results 

Quelqu'un at-il un moyen plus efficace de publier l'ensemble de résultats en vrac dans une table de suivi?

Répondre

2

Vous n'avez pas besoin de la table @Results.

L'insertion et la sélection directes à partir de la TableA font le travail et seront probablement les plus efficaces.

DECLARE @QueryTime DATETIME 
SET @QueryTime = GetDate() 
INSERT INTO TableB 
SELECT X, @QueryTime FROM TableA 
SELECT X, Y FROM @TableA 
+0

Merci, cela a très bien fonctionné. Parfois, tailler les choses est tout ce dont vous avez besoin. Je ne sais pas pourquoi j'étais si opposé à l'exécution de la requête à deux reprises. –

1

Si vous utilisez Sql 2008, vous pouvez renvoyer les lignes au format XML. Ensuite, vous auriez juste 1 ligne à insérer dans votre table de suivi.

Questions connexes