J'ai cette requête avec MySQL:
select * from table1 LIMIT 10,20
Comment puis-je faire cela avec SQL Server?
sql
sql-server
migration
Grosses boules
la source
la source
Réponses:
À partir de SQL SERVER 2005, vous pouvez le faire ...
ou quelque chose comme ça pour les versions 2000 et inférieures ...
la source
Clunky, mais ça marchera.
L'omission par MSSQL d'une clause LIMIT est criminelle, IMO. Vous ne devriez pas avoir à faire ce genre de solution de contournement kludgy.
la source
À partir de SQL SERVER 2012, vous pouvez utiliser la clause OFFSET FETCH:
http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx
Cela peut ne pas fonctionner correctement lorsque la commande par n'est pas unique.
Si la requête est modifiée en ORDER BY OrderDate, le jeu de résultats renvoyé n'est pas celui attendu.
la source
C'est presque le double d'une question que j'ai posée en octobre: émuler la clause MySQL LIMIT dans Microsoft SQL Server 2000
Si vous utilisez Microsoft SQL Server 2000, il n'y a pas de bonne solution. La plupart des gens doivent recourir à la capture du résultat de la requête dans une table temporaire avec une
IDENTITY
clé primaire. Puis interrogez la colonne de clé primaire à l'aide d'unBETWEEN
condition.Si vous utilisez Microsoft SQL Server 2005 ou une version ultérieure, vous disposez d'une
ROW_NUMBER()
fonction, vous pouvez donc obtenir le même résultat, mais évitez la table temporaire.Vous pouvez également l'écrire comme une expression de table commune comme indiqué dans la réponse de @Leon Tayson .
la source
Voici comment je limite les résultats dans MS SQL Server 2012:
REMARQUE:
OFFSET
ne peut être utilisé qu'avec ou en tandem pourORDER BY
.Pour expliquer la ligne de code
OFFSET xx ROWS FETCH NEXT yy ROW ONLY
le
xx
est le numéro d'enregistrement / de ligne à partir duquel vous souhaitez commencer à extraire dans la table, c'est-à-dire: S'il y a 40 enregistrements dans le tableau 1, le code ci-dessus commencera à extraire à partir de la ligne 10.le
yy
est le nombre d'enregistrements / lignes que vous souhaitez extraire de la table.Pour construire sur l'exemple précédent: Si la table 1 contient 40 enregistrements et que vous avez commencé à extraire de la ligne 10 et à saisir l'ensemble NEXT de 10 (
yy
). Cela signifierait que le code ci-dessus extraira les enregistrements de la table 1 à partir de la ligne 10 et se terminant à 20. Tirant ainsi les lignes 10 à 20.Consultez le lien pour plus d'informations sur OFFSET
la source
la source
Syntaxiquement, la requête MySQL LIMIT est quelque chose comme ceci:
Cela peut être traduit dans Microsoft SQL Server comme
Maintenant, votre requête
select * from table1 LIMIT 10,20
sera comme ceci:la source
C'est l'une des raisons pour lesquelles j'essaie d'éviter d'utiliser MS Server ... mais quand même. Parfois, vous n'avez tout simplement pas d'option (yei! Et je dois utiliser une version obsolète !!).
Ma suggestion est de créer une table virtuelle:
De:
À:
Ensuite, interrogez simplement:
Si des champs sont ajoutés ou supprimés, la "ligne" est mise à jour automatiquement.
Le principal problème avec cette option est que ORDER BY est résolu. Donc, si vous voulez un ordre différent, vous devrez créer une autre vue.
METTRE À JOUR
Il y a un autre problème avec cette approche: si vous essayez de filtrer vos données, cela ne fonctionnera pas comme prévu. Par exemple, si vous faites:
WHERE devient limité aux données qui sont dans les lignes entre 10 et 20 (au lieu de rechercher l'ensemble de données et de limiter la sortie).
la source
Il s'agit d'une approche en plusieurs étapes qui fonctionnera dans SQL2000.
la source
la source
Dois essayer. Dans la requête ci-dessous, vous pouvez voir le groupe par, l'ordre par, ignorer les lignes et limiter les lignes.
la source
Est le même que
Voici un article sur l'implémentation de Limit dans MsSQL C'est une bonne lecture, spécialement les commentaires.
la source
En SQL, il n'existe pas de mot clé LIMIT. Si vous n'avez besoin que d'un nombre limité de lignes, vous devez utiliser un mot-clé TOP similaire à LIMIT.
la source
Si votre identifiant est de type identifiant unique ou que votre identifiant dans la table n'est pas trié, vous devez procéder comme suit.
Le code sera
la source
--Donner une colonne [Count] et attribuer à chaque ligne un comptage unique sans ordonner quelque chose, puis re-sélectionner où vous pouvez fournir vos limites .. :)
la source
L'un des moyens possibles d'obtenir le résultat ci-dessous, espérons que cela vous aidera.
la source
Moyen facile
MYSQL:
MSSQL:
ORDER BY est obligatoire
la source
Si je me souviens bien (cela fait un moment que je n'ai pas utilisé SQL Server), vous pourrez peut-être utiliser quelque chose comme ceci: (2005 et plus)
la source
WHERE
un alias défini dans la mêmeSELECT
clause de niveau .