SQL Server CTE – SELECT après UPDATE en utilisant OUTPUT INSERTED

J'ai vu quelques messages sur l'utilisation de CTE (WITH) que je pensais résoudre mon problème mais je n'arrive pas à le faire fonctionner pour mon cas d'utilisation spécifique. Mon cas d'utilisation est que j'ai une table avec une série d'loggings, et j'ai besoin de tirer un certain nombre d'loggings APRÈS une petite mise à jour a été faite pour eux.

ie – récupérer les loggings où une série de conditions sont remplies – mettre à jour une ou plusieurs colonnes dans chacun de ces loggings – returnner les loggings mis à jour

Je sais que je peux returnner les identifiants des documents en utilisant ce qui suit:

WITH cte AS ( SELECT TOP 1 * FROM msg WHERE guid = 'abcd' AND active = 1 ORDER BY created DESC ) UPDATE cte SET active = 0 OUTPUT INSERTED.msg_id WHERE guid = 'abcd' 

Cela returnne bien le champ msg_id. J'ai essayé d'encapsuler tout cela dans une requête SELECT * FROM msg WHERE msg_id IN () , mais elle échoue.

Quelqu'un a une suggestion? Pour reference, en utilisant SQL Server 2008 R2.

Vous pouvez sélectionner datatables dont vous avez besoin en ajoutant simplement toutes les colonnes que vous souhaitez. INSERTED contient toutes les colonnes, pas seulement celles qui sont écrites dans. Vous pouvez également générer des colonnes à partir de l'alias cte . Exemple:

 OUTPUT INSERTED.SomeOtherColumn, cte.SomeOtherColumn 
  CREATE TABLE #t (msg_id int) ; WITH cte AS ( SELECT TOP 1 * FROM msg WHERE guid = 'abcd' AND active = 1 ORDER BY created DESC ) UPDATE cte SET active = 0 OUTPUT INSERTED.msg_id INTO #t WHERE guid = 'abcd' SELECT * FROM #t