L'utilisation de SET ROWCOUNT dans SQL Server - la Limitation de l'ensemble de résultats
J'ai une requête sql qui se compose de plusieurs instructions SELECT. Je veux limiter le nombre total de lignes de revenir à disons 1000 lignes. Je pensais qu'en utilisant le SET ROWCOUNT 1000 directive devrait le faire...mais il ne le fait pas. Par exemple:
SET ROWCOUNT 1000
select orderId from TableA
select name from TableB
Ma première pensée était que SET ROWCOUNT s'appliquerait à la ensemble lot, pas les instructions individuelles à l'intérieur. Le comportement que je vois est qu'il limite l'sélectionnez d'abord à 1000 et puis, la seconde à 1000 pour un total de 2000 lignes retournées. Est-il possible d'avoir les 1000 limite appliquée pour le lot dans son ensemble?
bien situé à 500 :p
qu'est-ce que vous êtes vraiment essayer de l'atteindre? Comme par @HLGEM la réponse c'est un peu bizarre comme décrit.
qu'est-ce que vous êtes vraiment essayer de l'atteindre? Comme par @HLGEM la réponse c'est un peu bizarre comme décrit.
OriginalL'auteur mikeymo | 2008-12-12
Vous devez vous connecter pour publier un commentaire.
Pas en une seule instruction. Vous allez avoir à soustraire @@ROWCOUNT partir du nombre total de lignes que vous le souhaitez, après chaque instruction, et l'utilisation d'une variable (par exemple, "@RowsLeft") pour stocker les lignes que vous voulez. Vous pouvez ensuite SÉLECTIONNER TOP @RowsLeft de chaque requête...
OriginalL'auteur Dave Markle
Et comment serait-il possible de voir tous les enregistrements à partir de la deuxième requête si la première renvoie toujours plus de 1000 si vous étiez en mesure de le faire dans un lot?
Si les requêtes sont) des nouvelles assez, vous pourriez essayer de le faire par l'intermédiaire d'un syndicat et d'utiliser le nombre de lignes sur ce qu'il ne serait qu'une seule requête à ce point. Si les requêtes sont différentes dans les colonnes retournées je ne suis pas sûr de ce que vous pourriez obtenir en limitant l'ensemble du groupe à 1000 lignes, parce que le sens serait différent. À partir d'un point de vue utilisateur, je préfère toujours obtenir 500 commandes et 500 noms de clients 998 orers et 2 noms, un jour et 210 commandes et 790 noms de la prochaine. Il serait impossible d'utiliser l'application, surtout si vous arrivé à être plus intéressés par l'information dans la deuxième requête.
OriginalL'auteur HLGEM
TOP (pas de nombre de lignes
http://msdn.microsoft.com/en-us/library/ms189463.aspx
Vous essayer d'obtenir de 1000 lignes MAX de toutes les tables de droite?
Je pense que d'autres méthodes peuvent remplir à partir du haut des requêtes d'abord, et vous pouvez ne jamais obtenir les résultats les plus bas.
OriginalL'auteur inspite
L'exigence des sons étranges. Sauf si vous êtes fusion ou de joindre les données de deux sélectionne, de les considérer comme un seul, de sorte que vous appliquez un max de lignes n'est tout simplement pas de sens, puisque ils sont sans rapport avec les requêtes à ce point. Si vous avez vraiment besoin pour ce faire, essayez de:
OriginalL'auteur RedFilter
SET ROWCOUNT s'applique à chaque requête. Dans votre exemple, il est appliqué deux fois, une fois pour chaque instruction SELECT, puisque chaque état est son propre lot (ils ne sont pas regroupés ou fusionné ou quoi que ce soit, et donc exécuter complètement séparément).
@RedFilter approche semble la plus probable pour vous donner ce que vous voulez.
OriginalL'auteur DaveE
Pas été testés et ne pas faire usage de nombre de lignes, mais il pourrait vous donner une idée?
Suppose col1 dans TableA et TableB sont du même type.
OriginalL'auteur AlexJReid
La suite fonctionné pour moi:
OriginalL'auteur kateroh
c'est votre solution :
TOP (Transact-SQL)
et les propos de @@RowCount vous pouvez lire ce Lien :
SET ROWCOUNT (Transact-SQL)
Important
À l'aide de
SET ROWCOUNT
will not affect
DELETE
,INSERT
, etUPDATE
états dans une future version de SQL Server.Avoid
à l'aide deSET ROWCOUNT
avecDELETE
,INSERT
, etUPDATE
états dans le développement de nouvelles et plan de modifier les applications qui l'utilisent actuellement. Pour un comportement similaire, utilisez la syntaxe TOP. Pour plus d'informations, voir TOP (Transact-SQL).Je pense que deux façon de travailler.!
OriginalL'auteur Ardalan Shahgholi