Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb de Insert

7 réponses
Avatar
BE \(Christophe Houchard\)
Bonjour,


je cré une table tempo #Table1 dans laquelle sont des données.
Les enregistrements de cette table sont rangés dans un certain ordre.

Et lorsque je fais un insert de ma table tempo dans une table physique, les
enregistrements se trouvent dans un ordre différent. Et tout à fait
aléatoire car si je lance ma procédure plusieurs fois, chaque fois cela me
retournera un ordre différent.

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from #table1

-- Insertion des enregistrements de la table tempo dans la table physique
-- en forcant l'ordre de classement a l'aide du champs c05
insert into table(col01, col02, col03, col04)
SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from table
--> Mais hélas l'ordre des enregistrements demandé, ne correspond pas.

Et il faut que la table soit classé dans l'ordre que j'ai déterminé, car
j'effectue une extraction avec la fonction bcp.

Merci de votre aide

7 réponses

Avatar
Patrice
Spécifier le ORDER au moment du SELECT dans la table temporaire plutôt qu'au
moment de l'INSERT.

Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
"indéterminé"

--
Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:
Bonjour,


je cré une table tempo #Table1 dans laquelle sont des données.
Les enregistrements de cette table sont rangés dans un certain ordre.

Et lorsque je fais un insert de ma table tempo dans une table physique,


les
enregistrements se trouvent dans un ordre différent. Et tout à fait
aléatoire car si je lance ma procédure plusieurs fois, chaque fois cela me
retournera un ordre différent.

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from #table1

-- Insertion des enregistrements de la table tempo dans la table physique
-- en forcant l'ordre de classement a l'aide du champs c05
insert into table(col01, col02, col03, col04)
SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from table
--> Mais hélas l'ordre des enregistrements demandé, ne correspond pas.

Et il faut que la table soit classé dans l'ordre que j'ai déterminé, car
j'effectue une extraction avec la fonction bcp.

Merci de votre aide








Avatar
BE \(Christophe Houchard\)
Cela ne change rien


"Patrice" a écrit dans le message de
news:
Spécifier le ORDER au moment du SELECT dans la table temporaire plutôt


qu'au
moment de l'INSERT.

Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
"indéterminé"

--
Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:
> Bonjour,
>
>
> je cré une table tempo #Table1 dans laquelle sont des données.
> Les enregistrements de cette table sont rangés dans un certain ordre.
>
> Et lorsque je fais un insert de ma table tempo dans une table physique,
les
> enregistrements se trouvent dans un ordre différent. Et tout à fait
> aléatoire car si je lance ma procédure plusieurs fois, chaque fois cela


me
> retournera un ordre différent.
>
> -- permet de constater que l'ordre de classement des enregistrement de


ma
> table correspond bien à ce que j'attends
> select * from #table1
>
> -- Insertion des enregistrements de la table tempo dans la table


physique
> -- en forcant l'ordre de classement a l'aide du champs c05
> insert into table(col01, col02, col03, col04)
> SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC
>
> -- permet de constater que l'ordre de classement des enregistrement de


ma
> table correspond bien à ce que j'attends
> select * from table
> --> Mais hélas l'ordre des enregistrements demandé, ne correspond pas.
>
> Et il faut que la table soit classé dans l'ordre que j'ai déterminé, car
> j'effectue une extraction avec la fonction bcp.
>
> Merci de votre aide
>
>
>
>
>
>




Avatar
Patrice
Tu veux dire que si tu précises l'ordre (dans l'instruction d'extraction des
données) SQL Server ne te renvoie pas les données dans l'ordre indiqu. Je
suis un pru surpris. Après il est peut-être possible que la "copie par bloc"
utilisée par bcp soit optimisée et ignore l'ordre des données pour prendre
le plus "rapide".

Indique peut-être comment l'extraction des données est-elle effectuée ?
(avec une requête et BCP en ligne de commande ?)

Question idiote... Pourquoi l'ordre de tes lignes est-il déterminant dans le
fichier résultat ?

--

Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:uq%
Cela ne change rien


"Patrice" a écrit dans le message de
news:
> Spécifier le ORDER au moment du SELECT dans la table temporaire plutôt
qu'au
> moment de l'INSERT.
>
> Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
> "indéterminé"
>
> --
> Patrice
>
> "BE (Christophe Houchard)" a écrit dans le message de
> news:
> > Bonjour,
> >
> >
> > je cré une table tempo #Table1 dans laquelle sont des données.
> > Les enregistrements de cette table sont rangés dans un certain ordre.
> >
> > Et lorsque je fais un insert de ma table tempo dans une table


physique,
> les
> > enregistrements se trouvent dans un ordre différent. Et tout à fait
> > aléatoire car si je lance ma procédure plusieurs fois, chaque fois


cela
me
> > retournera un ordre différent.
> >
> > -- permet de constater que l'ordre de classement des enregistrement de
ma
> > table correspond bien à ce que j'attends
> > select * from #table1
> >
> > -- Insertion des enregistrements de la table tempo dans la table
physique
> > -- en forcant l'ordre de classement a l'aide du champs c05
> > insert into table(col01, col02, col03, col04)
> > SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC
> >
> > -- permet de constater que l'ordre de classement des enregistrement de
ma
> > table correspond bien à ce que j'attends
> > select * from table
> > --> Mais hélas l'ordre des enregistrements demandé, ne correspond pas.
> >
> > Et il faut que la table soit classé dans l'ordre que j'ai déterminé,


car
> > j'effectue une extraction avec la fonction bcp.
> >
> > Merci de votre aide
> >
> >
> >
> >
> >
> >
>
>




Avatar
BE \(Christophe Houchard\)
Non l'order by fonction bien avec le select. Mais c avec le insert qu'il ne
fonctionne pas.

L'ordre de la table physique est important car à l'aide de la commande bcp
j'extrait un fichier txt qui est lu une une appli.

Sinon j'aurais bien fait un order by avec la commande bcp, mais elle ne
l'accepte pas.
SET @Cmd = 'bcp "base..[table]" out
"posterepfichier.txt" -c -Sserversql -Usa -P -t"," -rn'
EXECUTE master..xp_cmdshell @cmd

Serait il possible d'utiliser une autre fonction que bcp ???

Merci de ton aide


"Patrice" a écrit dans le message de
news:
Tu veux dire que si tu précises l'ordre (dans l'instruction d'extraction


des
données) SQL Server ne te renvoie pas les données dans l'ordre indiqu. Je
suis un pru surpris. Après il est peut-être possible que la "copie par


bloc"
utilisée par bcp soit optimisée et ignore l'ordre des données pour prendre
le plus "rapide".

Indique peut-être comment l'extraction des données est-elle effectuée ?
(avec une requête et BCP en ligne de commande ?)

Question idiote... Pourquoi l'ordre de tes lignes est-il déterminant dans


le
fichier résultat ?

--

Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:uq%
> Cela ne change rien
>
>
> "Patrice" a écrit dans le message de
> news:
> > Spécifier le ORDER au moment du SELECT dans la table temporaire plutôt
> qu'au
> > moment de l'INSERT.
> >
> > Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
> > "indéterminé"
> >
> > --
> > Patrice
> >
> > "BE (Christophe Houchard)" a écrit dans le message


de
> > news:
> > > Bonjour,
> > >
> > >
> > > je cré une table tempo #Table1 dans laquelle sont des données.
> > > Les enregistrements de cette table sont rangés dans un certain


ordre.
> > >
> > > Et lorsque je fais un insert de ma table tempo dans une table
physique,
> > les
> > > enregistrements se trouvent dans un ordre différent. Et tout à fait
> > > aléatoire car si je lance ma procédure plusieurs fois, chaque fois
cela
> me
> > > retournera un ordre différent.
> > >
> > > -- permet de constater que l'ordre de classement des enregistrement


de
> ma
> > > table correspond bien à ce que j'attends
> > > select * from #table1
> > >
> > > -- Insertion des enregistrements de la table tempo dans la table
> physique
> > > -- en forcant l'ordre de classement a l'aide du champs c05
> > > insert into table(col01, col02, col03, col04)
> > > SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC
> > >
> > > -- permet de constater que l'ordre de classement des enregistrement


de
> ma
> > > table correspond bien à ce que j'attends
> > > select * from table
> > > --> Mais hélas l'ordre des enregistrements demandé, ne correspond


pas.
> > >
> > > Et il faut que la table soit classé dans l'ordre que j'ai déterminé,
car
> > > j'effectue une extraction avec la fonction bcp.
> > >
> > > Merci de votre aide
> > >
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>




Avatar
BE \(Christophe Houchard\)
J'ai trouvé une parade, en utilisant une vue qui me permet de gérer
l'affichage désiré.

Merci pour ton aide

"Patrice" a écrit dans le message de
news:
Tu veux dire que si tu précises l'ordre (dans l'instruction d'extraction


des
données) SQL Server ne te renvoie pas les données dans l'ordre indiqu. Je
suis un pru surpris. Après il est peut-être possible que la "copie par


bloc"
utilisée par bcp soit optimisée et ignore l'ordre des données pour prendre
le plus "rapide".

Indique peut-être comment l'extraction des données est-elle effectuée ?
(avec une requête et BCP en ligne de commande ?)

Question idiote... Pourquoi l'ordre de tes lignes est-il déterminant dans


le
fichier résultat ?

--

Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:uq%
> Cela ne change rien
>
>
> "Patrice" a écrit dans le message de
> news:
> > Spécifier le ORDER au moment du SELECT dans la table temporaire plutôt
> qu'au
> > moment de l'INSERT.
> >
> > Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
> > "indéterminé"
> >
> > --
> > Patrice
> >
> > "BE (Christophe Houchard)" a écrit dans le message


de
> > news:
> > > Bonjour,
> > >
> > >
> > > je cré une table tempo #Table1 dans laquelle sont des données.
> > > Les enregistrements de cette table sont rangés dans un certain


ordre.
> > >
> > > Et lorsque je fais un insert de ma table tempo dans une table
physique,
> > les
> > > enregistrements se trouvent dans un ordre différent. Et tout à fait
> > > aléatoire car si je lance ma procédure plusieurs fois, chaque fois
cela
> me
> > > retournera un ordre différent.
> > >
> > > -- permet de constater que l'ordre de classement des enregistrement


de
> ma
> > > table correspond bien à ce que j'attends
> > > select * from #table1
> > >
> > > -- Insertion des enregistrements de la table tempo dans la table
> physique
> > > -- en forcant l'ordre de classement a l'aide du champs c05
> > > insert into table(col01, col02, col03, col04)
> > > SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC
> > >
> > > -- permet de constater que l'ordre de classement des enregistrement


de
> ma
> > > table correspond bien à ce que j'attends
> > > select * from table
> > > --> Mais hélas l'ordre des enregistrements demandé, ne correspond


pas.
> > >
> > > Et il faut que la table soit classé dans l'ordre que j'ai déterminé,
car
> > > j'effectue une extraction avec la fonction bcp.
> > >
> > > Merci de votre aide
> > >
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>




Avatar
Patrice
Ok. Pour récapituler :
- il n'y a pas d'ordre sur le INSERT. L'ordre porte sur le SELECT
- en l'absence d'indication, l'ordre n'est pas garantie. Cela peut être
n'importe quel ordre et pas forcément l'ordre physique.

C'est donc à la sélection des données qu'il faut indiquer l'ordre soit en
utilisant une vue comme tu l'as fait. Tu peux aussi je pense utiliser une
requête (un SELECT avec un ORDER) directement à la place du nom de la table
dans BCP...

--
Patrice

"BE (Christophe Houchard)" a écrit dans le message de
news:
J'ai trouvé une parade, en utilisant une vue qui me permet de gérer
l'affichage désiré.

Merci pour ton aide

"Patrice" a écrit dans le message de
news:
> Tu veux dire que si tu précises l'ordre (dans l'instruction d'extraction
des
> données) SQL Server ne te renvoie pas les données dans l'ordre indiqu.


Je
> suis un pru surpris. Après il est peut-être possible que la "copie par
bloc"
> utilisée par bcp soit optimisée et ignore l'ordre des données pour


prendre
> le plus "rapide".
>
> Indique peut-être comment l'extraction des données est-elle effectuée ?
> (avec une requête et BCP en ligne de commande ?)
>
> Question idiote... Pourquoi l'ordre de tes lignes est-il déterminant


dans
le
> fichier résultat ?
>
> --
>
> Patrice
>
> "BE (Christophe Houchard)" a écrit dans le message de
> news:uq%
> > Cela ne change rien
> >
> >
> > "Patrice" a écrit dans le message de
> > news:
> > > Spécifier le ORDER au moment du SELECT dans la table temporaire


plutôt
> > qu'au
> > > moment de l'INSERT.
> > >
> > > Si l'ordre n'est pas indiqué explicitement dans un SELECT, il est
> > > "indéterminé"
> > >
> > > --
> > > Patrice
> > >
> > > "BE (Christophe Houchard)" a écrit dans le message
de
> > > news:
> > > > Bonjour,
> > > >
> > > >
> > > > je cré une table tempo #Table1 dans laquelle sont des données.
> > > > Les enregistrements de cette table sont rangés dans un certain
ordre.
> > > >
> > > > Et lorsque je fais un insert de ma table tempo dans une table
> physique,
> > > les
> > > > enregistrements se trouvent dans un ordre différent. Et tout à


fait
> > > > aléatoire car si je lance ma procédure plusieurs fois, chaque fois
> cela
> > me
> > > > retournera un ordre différent.
> > > >
> > > > -- permet de constater que l'ordre de classement des


enregistrement
de
> > ma
> > > > table correspond bien à ce que j'attends
> > > > select * from #table1
> > > >
> > > > -- Insertion des enregistrements de la table tempo dans la table
> > physique
> > > > -- en forcant l'ordre de classement a l'aide du champs c05
> > > > insert into table(col01, col02, col03, col04)
> > > > SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC
> > > >
> > > > -- permet de constater que l'ordre de classement des


enregistrement
de
> > ma
> > > > table correspond bien à ce que j'attends
> > > > select * from table
> > > > --> Mais hélas l'ordre des enregistrements demandé, ne correspond
pas.
> > > >
> > > > Et il faut que la table soit classé dans l'ordre que j'ai


déterminé,
> car
> > > > j'effectue une extraction avec la fonction bcp.
> > > >
> > > > Merci de votre aide
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Fred BROUARD
La notion d'ordre n'existe pas dans les SGBDR. A lire :
http://sqlpro.developpez.com/cours/sqlaz/fondements/#L3
http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L6

C'est le serveur qui choisit la manière optimale de stocker l'information.
Avoir un ordre physique serait contraire à la logique ensembliste des SGBDR.
Une table peut être comme comme un ensemble, par exemple comme un sac de bille.
Si je te donne monj sac de bille, est-tu capbale de savoir quelle a été la
dernière bille à y être entrée ?

Néanmoins, tu peut contraindre un ordre physique des lignes en utilisant un
index cluster. Cepandant, ormis le cas de l'auto incrément ou de la datation
chronologique, un index de type CLUSTER risque de nuire aux perfs.

Le seul ordre valable est celui réalisé par la clause de tri SQL "ORDER BY".


BE (Christophe Houchard) a écrit:
Bonjour,


je cré une table tempo #Table1 dans laquelle sont des données.
Les enregistrements de cette table sont rangés dans un certain ordre.

Et lorsque je fais un insert de ma table tempo dans une table physique, les
enregistrements se trouvent dans un ordre différent. Et tout à fait
aléatoire car si je lance ma procédure plusieurs fois, chaque fois cela me
retournera un ordre différent.

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from #table1

-- Insertion des enregistrements de la table tempo dans la table physique
-- en forcant l'ordre de classement a l'aide du champs c05
insert into table(col01, col02, col03, col04)
SELECT c01, c02, c03, c04 FROM #Table1 ORDER BY #Table1.c05 ASC

-- permet de constater que l'ordre de classement des enregistrement de ma
table correspond bien à ce que j'attends
select * from table
--> Mais hélas l'ordre des enregistrements demandé, ne correspond pas.

Et il faut que la table soit classé dans l'ordre que j'ai déterminé, car
j'effectue une extraction avec la fonction bcp.



Dans ce cas ajouter à la requête SQL la clause ORDER BY



Merci de votre aide





A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************