[c#] SQL: mettre à jour une ligne et renvoyer une valeur de colonne avec 1 requête


Answers

N'accède à la table qu'une seule fois:

UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;
Question

J'ai besoin de mettre à jour une ligne dans une table, et d'en obtenir une valeur de colonne. Je peux le faire avec

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

Cela génère 2 plans / accès à la table. Est-ce que possibile dans T-SQL pour modifier l'instruction UPDATE afin de mettre à jour et retourner la colonne Nom avec 1 plan / accès seulement?

J'utilise les méthodes C #, ADO.NET ExecuteScalar() ou ExecuteReader() .




Je n'ai pas pu mettre à jour et retourner une ligne dans une instruction select . C'est-à-dire que vous ne pouvez pas utiliser la valeur sélectionnée parmi les autres réponses.

Dans mon cas, je voulais utiliser la valeur sélectionnée dans une requête. La solution que j'ai trouvée était:

declare @NextId int
set @NextId = (select Setting from Settings where key = 'NextId')

select @NextId + ROW_NUMBER() over (order by SomeColumnOfYourTable) from YourTable

update Settings set Setting = Setting + @@ROWCOUNT 
where key = 'NextId'



Utilisez une procédure stockée pour cela.




Links