J'ai une table d'état et une autre table contenant des données supplémentaires. Mes identifiants d'objets sont les PK dans la table d'état, je dois donc les insérer dans la table de données supplémentaire pour chaque nouvelle ligne.Insérer les ID de sortie dans une autre table
J'ai besoin d'insérer une nouvelle ligne dans mon statusTable pour chaque nouvelle liste, contenant juste des constantes.
declare @temp TABLE(listingID int)
insert into statusTable(status, date)
output Inserted.listingID into @temp
select 1, getdate()
from anotherImportedTable
Cela me donne assez de nouveaux identifiants de liste à utiliser.
J'ai besoin maintenant d'insérer les données de la liste réelle dans une autre table, et la carte chaque ligne à un de ces listingIDs -
insert into listingExtraData(listingID, data)
select t.listingID, a.data
from @temp t, anotherImportedTable a
Maintenant, ce évidemment ne fonctionne pas, parce que otherDataTable et les ID dans @temp ne sont pas liés ... donc je reçois beaucoup trop de lignes insérées.
Comment puis-je insérer chaque ligne de anotherImportedTable
dans listingExtraData
avec un listingID
nouvellement créé unique? pourrais-je éventuellement déclencher un peu plus de sql au point que je fais le output
dans le premier bloc de sql?
modifier: Merci pour l'entrée jusqu'à présent, voici ce que les tables ressemblent:
anotherImportedTable:
data
statusTable:
listingID (pk), status, date
listingExtraDa ta:
data, listingID
Vous voyez que je veux seulement créer une entrée en statusTable
par ligne dans anotherImportedTable
, puis mettre un listingID
avec une ligne de anotherImportedTable
dans listingExtraData
... Je pense que je pourrais avoir à recourir à un curseur peut-être?
Dans la deuxième table, qu'est-ce qui indique à quel enregistrement vous voulez qu'il se rapporte? Veuillez être plus précis sur la structure et l'utilisation de la deuxième table. Incidemment, n'utilisez jamais de jointures implicites. Ce que vous avez est une jointure croisée qui relie chaque enregistrement de la première table à un enregistrement très précis de la table sencond. Même si vous le souhaitiez, il est préférable d'utiliser une syntaxe explicite pour que les personnes qui vous conservent sachent ce que vous vouliez et que la jointure croisée ne soit pas un accident. – HLGEM
@HLGEM Je suis complètement d'accord, c'est un peu un bordel, d'où je me retrouve ici :) merci pour votre contribution - plus de détails fournis. – RYFN