Search code examples
c#sql-servert-sqlado.net

SQL: Update a row and returning a column value with 1 query


I need to update a row in a table, and get a column value from it. I can do this with

UPDATE Items SET Clicks = Clicks + 1 WHERE Id = @Id;
SELECT Name FROM Items WHERE Id = @Id

This generates 2 plans/accesses to the table. Is possibile in T-SQL to modify the UPDATE statement in order to update and return the Name column with 1 plan/access only?

I'm using C#, ADO.NET ExecuteScalar() or ExecuteReader() methods.


Solution

  • You want the OUTPUT clause

    UPDATE Items SET Clicks = Clicks + 1
    OUTPUT INSERTED.Name
    WHERE Id = @Id