0
votes

Exécuter plusieurs requêtes SQL sur un seul CTE

cas d'utilisation: strong> Une table de base de données suit des voitures sur beaucoup. Chaque voiture doit être inspectée tous les trois mois. Lorsque je tire une liste de voitures pour inspecter, je souhaite également mettre à jour leur [statut] pour refléter cela. Cela peut être fait en utilisant une table Temp, mais une expression de table commune exécuterait plus vite et serait plus logique si elle pouvait être utilisée de cette façon.

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 commentaires

Nom du SGBD s'il vous plaît


Le CTE est une vue "ad-hoc" disponible pour une déclaration ultérieure . 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.


4 Réponses :


1
votes

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> ;


0 commentaires

0
votes

Par interne Rejoignez le CTE avec la table que vous souhaitez mettre à jour, vous ne mettez à jour que ces enregistrements joints. xxx


0 commentaires

0
votes

Vous pouvez utiliser la clause de sortie de l'instruction de mise à jour pour obtenir la liste après la mise à jour.

https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=SQL-Server-2017


0 commentaires

0
votes

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>


1 commentaires

Bienvenue pour, vous avez déjà une réponse avec le même code, veuillez lire ce Stackoverflow.com/help/someone-answers