Tentative de solution: strong> P> WITH CTE AS (
SELECT ID
FROM [dbo].[CarInventory]
WHERE <car requires inspection> )
SELECT ID
FROM CTE;
UPDATE [dbo].[CarInventory]
SET Status = 'Queued for inspection'
WHERE ID IN (SELECT ID FROM CTE);
4 Réponses :
Je ne comprends pas. Pourquoi sélectionnez-vous le ID code> S? DO:
UPDATE ci
SET Status = 'Queued for inspection'
FROM [dbo].[CarInventory] ci;
WHERE <car requires inspection> ;
Par interne Rejoignez le CTE avec la table que vous souhaitez mettre à jour, vous ne mettez à jour que ces enregistrements joints.
Vous pouvez utiliser la clause de sortie de l'instruction de mise à jour pour obtenir la liste après la mise à jour. P>
https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=SQL-Server-2017 p>
J'aborde simplement le mauvais arbre en utilisant CTE en premier lieu. Merci de me donner droit! En outre, désolé de vous laisser deviner sur des logiciels; J'utilisais SSMS.
Utilisation de la clause de sortie recommandée par Joe et Ryan pour mettre à jour une table et voir également les enregistrements concernés travaillés. P>
UPDATE [dbo].[CarInventory] SET Status = 'Queued for inspection' OUTPUT Deleted.ID WHERE <car requires inspection>
Bienvenue pour, vous avez déjà une réponse avec le même code, veuillez lire ce Stackoverflow.com/help/someone-answers
Nom du SGBD s'il vous plaît
Le CTE est une vue "ad-hoc" disponible pour une déclaration ultérieure B>. Il n'y a rien qui puisse changer cela. Si vous devez exécuter plusieurs instructions sur l'ensemble de résultats du CTE, stockez ces résultats dans une table temporaire (ou une variable de table, dans SQL Server - si c'est ce que vous utilisez)
Vous ne pouvez pas utiliser de CTE pour plusieurs requêtes. Vous pouvez créer une table TEMP et stocker à l'intérieur des données de CTE. Pour cet exemple particulier, si vous êtes dans TSQL (N'a pas mentionné le SGBD), vous pouvez inclure dans la mise à jour, sortie insérée.Id afin que vous puissiez obtenir les identifiants mis à jour.
Passer le CTE, créer une vue à la place.