essaient NTILE (n), où n = nombre de morceaux. Puisque vous devez créer les « gros morceau » tables, vous devez savoir combien de morceaux dont vous avez besoin, et NTILE divisera les lignes correctement pour vous:
DECLARE @YourTable table (RowID int, RowValue varchar(5))
INSERT @YourTable VALUES (1,'A')
INSERT @YourTable VALUES (2,'B')
INSERT @YourTable VALUES (3,'C')
INSERT @YourTable VALUES (4,'D')
INSERT @YourTable VALUES (5,'E')
INSERT @YourTable VALUES (6,'F')
INSERT @YourTable VALUES (7,'G')
INSERT @YourTable VALUES (8,'H')
INSERT @YourTable VALUES (9,'I')
INSERT @YourTable VALUES (10,'J')
INSERT @YourTable VALUES (11,'K')
INSERT @YourTable VALUES (12,'L')
DECLARE @YourTable1 table (RowID int, RowValue varchar(5))
DECLARE @YourTable2 table (RowID int, RowValue varchar(5))
DECLARE @YourTable3 table (RowID int, RowValue varchar(5))
DECLARE @YourTable4 table (RowID int, RowValue varchar(5))
DECLARE @YourTable5 table (RowID int, RowValue varchar(5))
INSERT @YourTable1
SELECT
RowID, RowValue
FROM (SELECT
RowID, RowValue
,NTILE(5) OVER(ORDER BY RowID) AS TableID
FROM @YourTable
) dt
WHERE dt.TableID=1
INSERT @YourTable2
SELECT
RowID, RowValue
FROM (SELECT
RowID, RowValue
,NTILE(5) OVER(ORDER BY RowID) AS TableID
FROM @YourTable
) dt
WHERE dt.TableID=2
INSERT @YourTable3
SELECT
RowID, RowValue
FROM (SELECT
RowID, RowValue
,NTILE(5) OVER(ORDER BY RowID) AS TableID
FROM @YourTable
) dt
WHERE dt.TableID=3
INSERT @YourTable4
SELECT
RowID, RowValue
FROM (SELECT
RowID, RowValue
,NTILE(5) OVER(ORDER BY RowID) AS TableID
FROM @YourTable
) dt
WHERE dt.TableID=4
INSERT @YourTable5
SELECT
RowID, RowValue
FROM (SELECT
RowID, RowValue
,NTILE(5) OVER(ORDER BY RowID) AS TableID
FROM @YourTable
) dt
WHERE dt.TableID=5
SELECT * FROM @YourTable1
SELECT * FROM @YourTable2
SELECT * FROM @YourTable3
SELECT * FROM @YourTable4
SELECT * FROM @YourTable5
SORTIE:
RowID RowValue
----------- --------
1 A
2 B
3 C
(3 row(s) affected)
RowID RowValue
----------- --------
4 D
5 E
6 F
(3 row(s) affected)
RowID RowValue
----------- --------
7 G
8 H
(2 row(s) affected)
RowID RowValue
----------- --------
9 I
10 J
(2 row(s) affected)
RowID RowValue
----------- --------
11 K
12 L
(2 row(s) affected)
Est-ce que la table source avoir des colonnes qui peuvent être utilisées pour trier les données dans un ordre cohérent/reproductible? En fait - pourriez-vous éditer votre question pour montrer le schéma de la table? –
Ne ferait pas n'importe quelle requête est nécessaire, avec un ordre par et puis ajouter «LIMIT 0,50000» à la première «exécution», «LIMIT 50000, 50000» à la seconde, et ainsi de suite, faire l'affaire? –