Problème concernant l'ordre de jointure interne dans SQL Server

Considérons une table tbl1 avec ID et Name . Paramètre de paramètre params par une table avec ID .

J'ai besoin de dupliquer les lignes dans tbl1 qui ont l' ID contenu dans params . J'essaie d'insert comme ça

 insert into tbl1(Name,somevalues..) select tbl1.Name, tbl1.somevalues.. from @params p inner join tbl1 on tbl1.ID=p.ID -- here ID is identity (PK). 

Mais après insertion, on constate que l'ordre d'insertion est différent. Si @params la requête de sélection seule, elle affichera l'ID basé sur @params (TVP). Mais la même requête quand je l'ai utilisé après l'insertion se déroulera d'une manière différente.

order dans TVP / Select Query – Une command lors de l'insertion en utilisant Select Query – B

  AB 370294 370294 368702 368702 369157 368504 368914 368505 368505 368914 368504 369157 368508 368506 368506 368507 368507 368508 368912 368637 368637 368638 368638 368639 368639 368912 368915 368915 368641 368641 

Il y a des identifiants qui sont différents dans l'ordre.

Quel sera le problème pour un ordre différent?

Comment puis-je insert des valeurs dans le même ordre que dans mon TVP?

Merci d'avance.

Toujours: ORDER est arbitraire sans ORDER BY.

Cela signifie que même si vous avez utilisé ORDER BY pour l'INSERT, il n'est pas garanti que le SELECT returnnera avec cet ordre à less que vous n'utilisiez ORDER BY sur le SELECT.

En d'autres termes: il n'y a pas d'ordre implicite ou naturel dans une table ou une vue.
Vous ne pouvez avoir une command définie qu'avec ORDER BY

modifier

Toutefois. il est à noter que les INNER JOINs sont à la fois commutatifs et associatifs. Autrement dit, vous obtenez les mêmes résultats. Vous requestz à propos de command que j'ai répondu ci-dessus

Pour en savoir plus, voir

  • Comment l'ordre des jointures affecte les performances d'une requête
  • comment organiser au mieux les jointures internes dans l'instruction (select)

Vous ne devez pas vous fier à l'ordre d'insertion dans vos requêtes SELECT . Utilisez la clause ORDER BY à la fin du SELECT pour définir comment classr les résultats.