INSÉRER DANS l'aide de SELECT et incrémenter la valeur dans une colonne
Je suis en train d'insérer manque des lignes dans une table. L'une des colonnes est OrderNumber
(numéro de tri), cette colonne doit être de +1 à la valeur max de OrderNumber
retourné pour sID
dans le tableau. Certains sIDs
n'apparaissent pas dans la SPOL
table qui est pourquoi il est le WHERE
clause à la fin de l'instruction. Je voudrais exécuter cette instruction de nouveau, mais à définir OrderNumber
à 1 pour les dossiers où sID
il n'existe actuellement pas dans le tableau.
La déclaration ci-dessous ne fonctionne pas en raison de la OrderNumber
à l'origine de problèmes avec la clé primaire qui est sID + OrderNumber
.
Comment puis-je obtenir le OrderNumber
d'augmentation pour chaque ligne qui est insérée basé sur la sID
de la colonne?
INSERT INTO SPOL(sID, OrderNumber, oID)
SELECT
sID, OrderNumber, oID
FROM
(SELECT
sID,
(SELECT Max(OrderNumber) + 1
FROM SPOL
WHERE sID = TMPO.sID) AS OrderNumber,
oID
FROM TMPO
WHERE NOT EXISTS (SELECT * FROM SPOL
WHERE SPOL.oID = TMPO.oID)
) AS MyData
WHERE
OrderNumber IS NOT NULL
OriginalL'auteur mheptinstall | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Il est préférable de les traiter dans la conception de base de données avec une colonne d'identité - vous ne mentionnez pas si oui ou non vous pouvez modifier le schéma mais j'espère que vous pouvez en tant que requêtes finira beaucoup plus propre si vous n'avez pas à gérer vous-même.
Vous pouvez définir la propriété d'Identité lors de votre colonne OrderNumber dans SQL Server management studio, mais le script, ça serait de générer des clones de la table avec la nouvelle spécification, insère les valeurs que vous avez déjà avec Identity_Insert, les gouttes de la table d'origine, et renomme le temporaire pour la remplacer, ce qui a massives de frais généraux en fonction du nombre de lignes que vous avez.
Le moyen le plus efficace de le faire est probablement:
Une fois que c'est fait, c'est fait - et s'occupe de lui-même. N'auriez-vous pas plutôt votre instruction insert simplement dit quelque chose comme ceci:
OriginalL'auteur Bridge
Utilisation identity(1,1) pour incrémenter votre colonne Numéro de Commande,cela rend votre tâche facile..!
OriginalL'auteur Teju MB