Je voudrais une requête qui, à son plus simple, rejoindra 2 tables ensemble sans autre relation expresse autre que chaque ligne dans ce que j'appellerai la table "pool" correspondre exactement à 1 rangée dans mon autre tableau. Je ne m'inquiète pas quelle ligne, je veux juste que chaque rangée dans ma table primaire obtienne une rangée simple de la table de «piscine» et sachez que chaque rangée de la piscine sera seulement utilisée une fois. Je pensais quelque chose comme ROW_NUMBER() OVER() pourrait être utilisé pour faire correspondre sur un numéro de ligne arbitraire qui serait bien, mais je pense qu'il faut au moins 2 fournisseurs de l'ensemble de lignes interne; Je pensais qu'il y aurait quelque chose de plus simple.Utilisez chaque ligne dans une table en la joignant à une autre table
Pour résoudre le problème de manière un peu plus succincte, vous disposez d'une table d'ID et vous souhaitez la joindre à une table d'enregistrements pour attribuer les ID. Vous ne pouvez utiliser chaque identifiant qu'une seule fois. Quelle structure de requête ou quelle jointure pouvez-vous utiliser pour renvoyer un ensemble de lignes de tous les enregistrements affectés chacun à un ID. Peu importe quel enregistrement obtient quel ID, seulement que chaque ID ne peut être utilisé qu'une seule fois.
Contexte
Pour ceux qui sont intéressés par l'arrière-plan, ce que j'ai est une entité logique qui est composée d'une ligne d'en-tête dans une table d'en-tête qui est générique pour beaucoup d'objets qui nous donne son ID, puis un enregistrement dans une table spécifique à l'entité. J'utilise une requête comme suit pour pregenerate un groupe d'ID dans la table d'en-tête:
declare @idsTable TABLE(ID INT);
INSERT INTO Header (HeaderType)
OUTPUT INSERTED.id INTO @idsTable
SELECT 4 as HeaderType
FROM Company c WHERE c.CompanyType = 12;
À ce stade, j'ai un tas de lignes d'en-tête et les ids (identité) qui ont été affectés aux lignes. Maintenant, je veux utiliser un INSERT similaire dans la table spécifique aux objets, mais j'ai besoin de faire correspondre un ID de @idsTable à seulement 1 ligne dans ma requête de sélection (et donc ma requête d'insertion). Quelque chose comme:
INSERT INTO Specific (HeaderiD, Value1, ...)
SELECT *
FROM @idsTable
JOIN RecordsToWrite r2r ON ???
Je n'ai pas abandonné, je pensais juste que ce n'était pas particulièrement lisible et qu'il y aurait quelque chose de plus simple. C'est précisément ce que je voulais dire par la solution row_number. –