10
votes

Faire sql sélectionner la même ligne plusieurs fois

Je dois tester mon serveur de messagerie. Comment puis-je faire une déclaration de sélection qui sélectionne dire id = 5469 mille fois.


2 commentaires

MS Access ... à l'aide du système.Oledb :)


Pouvez-vous utiliser Excel pour créer une requête? Essayez-vous de construire une requête de temps ou vous devez avoir besoin de sous-programme ou de fonction VBA?


11 Réponses :


-2
votes

dans SQL Server Essayez: xxx

sortie: xxx


5 commentaires

Cela donnera-t-il un résultat défini avec 1000 rangées?


@Spender, voudriez-vous voir l'exemple de sortie 1000 fois? ou est assez assez ?? Si vous ne pouvez pas voir que cela le fait 5 fois et que la sortie de l'échantillon le présente 5 fois, vous avez besoin de beaucoup d'aide. OP ne dit jamais qu'ils veulent un ensemble de résultats avec 1000 lignes, OP dit qu'ils testent et ont besoin d'une instruction SELECT qui sélectionne SAY ID = 5469 mille fois. Une sélection de 1000 lignes est un test assez différent. qu'un seul sélection de 1000 fois.


Je soupçonne juste que ce n'est pas ce que pos demandait. Pour autant que je sache, ils veulent un résultat défini avec 1000x la même rangée. L'impression d'une valeur x fois n'est pas équivalente. Je vois que nous avons une interpréation différente de ce qui a été demandé, c'est tout.


@Spender, vous pouvez remplacer le Imprimer avec n'importe quelle instruction, Sélectionner génère plusieurs lignes de sortie (en-tête, données, lignes concernées) et utilise plus d'espace de page, donc j'ai opté pour < Code> Imprimer .


Je ne savais pas que cette syntaxe existe si définitivement j'apprends une nouvelle chose, mais j'ai aussi appris que ceci est une insertion individuelle et non des inserts par lots.



1
votes

Si vous le faites dans SQL Server

declare @cnt int
set @cnt = 0

while @cnt < 1000
begin
    select '12345'
    set @cnt = @cnt + 1
end 


1 commentaires

Cela renvoie des ensembles de résultats "n" avec une ligne chacun, pas un résultat défini avec "N" fois la même ligne.



7
votes

Vous pouvez utiliser l'énoncé de l'Union.

Essayez quelque chose comme: xxx

Vous devez répéter l'instruction SELECT un tas de fois, mais vous pouvez écrire un peu de code VB dans l'accès à la création d'une dynamique. Instruction SQL puis l'exécuter. Pas jolie mais cela devrait fonctionner.


1 commentaires

Wow! Union tout x1000 - doute que l'accès peut jamais gérer une telle requête =)



23
votes

Si je reçois votre signification, un moyen très simple consiste à traverser une requête dérivée sur une table avec plus de 1000 rangées et placez un top 1000 à ce sujet. Cela dupliquerait vos résultats 1000 fois.

Edit: comme exemple (c'est MSSQL, je ne sais pas si l'accès est très différent) P>

SELECT
    MyTable.*
FROM
    MyTable
CROSS JOIN
(
    SELECT TOP 1000
        *
    FROM
        sysobjects
) [BigTable]
WHERE
    MyTable.ID = 1234


1 commentaires

Pouvons-nous définir une variable au lieu de définir un nombre exact? Par exemple ... Sélectionnez Top @i à partir de ... Parce que j'ai une requête qui a une colonne nommée numéro , je veux répéter cette ligne dans numéro temps de colonne. Par exemple, si j'ai une ligne que sa colonne numérique est 2, elle répéterait cette colonne deux fois et continuerait à le faire pour toutes les lignes.



4
votes

Créer une table d'assistance à cet effet:
Just_Number (Num Int Tye Primary) Code>
Insérer (à l'aide de certains (VB) Script) des nombres de 1 à N. Ensuite, exécutez cette requête non adjointe:

SELECT  MYTABLE.*
FROM    MYTABLE,
        JUST_NUMBER
WHERE   MYTABLE.ID = 5469 
    AND JUST_NUMBER.NUM <= 1000


0 commentaires

2
votes

Voici un moyen d'utiliser une expression de table commune récursive pour générer des lignes vides, puis pour croiser les rejoindre sur votre ligne souhaitée: xxx

substitut @mydata Pour votre vraie table et modifiez le prédicat final à la convention.


0 commentaires

-1
votes

Le moyen facile est de créer une table avec 1000 rangées. Appelons-le bigtable code>. Ensuite, vous interrogez pour les données que vous souhaitez et joinriez-la avec la grande table, comme ceci:

SELECT MyTable.*
FROM MyTable, BigTable
WHERE MyTable.ID = 5469


0 commentaires

0
votes

Créer une table # TMP1 (ID INT, FLD VARCHAR (MAX))) Insérer dans # TMP1 (ID, FLD) Valeurs (1, 'Bonjour!'), (2, 'World'), (3, 'Belle journée!')

Sélectionnez * à partir de # TMP1 aller

Sélectionnez * à partir de # TMP1 où id = 3 aller 1000

Table de goutte # TMP1


0 commentaires

2
votes

manière facile ...

Ceci n'existe qu'une ligne dans la DB xxx

Essayez de relier une autre table dans laquelle n'a aucune clé de contrainte sur la table principale < / p>

requête d'origine xxx

La requête fonctionnelle ... Ajout d'une table non liée appelée 'dbo.tb_labels' xxx


0 commentaires

2
votes

à Postgres il y a une belle fonction appelée générate_series. Donc, dans PostgreSQL c'est aussi simple que: xxx

de cette manière, la requête est exécutée 1000 fois.

Exemple pour PostgreSQL: < / p> xxx

Comme vous pouvez le constater dans le résultat ci-dessous, les données d'UID sont lues 1000 fois confirmées par la génération d'une nouvelle UUID à chaque nouvelle ligne. < Pré> xxx

Bien sûr, d'autres DBS n'auront pas nécessairement la même fonction, mais cela pourrait être fait:

voir ICI .


0 commentaires

0
votes

répéter les lignes basées sur la valeur de la colonne de testtable. Exécutez d'abord la table Créer une table et une instruction Insérer, puis exécutez la requête suivante pour le résultat souhaité. Cela peut être une autre solution: xxx


0 commentaires