Вернуть запись, измененную UPDATE TOP 1 - PullRequest
3 голосов
/ 16 сентября 2011

У меня есть приложение на C #, и я хотел бы вернуть запись, обновленную TSQL UPDATE TOP 1 без выполнения 2-го запроса. Это возможно?

Ответы [ 3 ]

3 голосов
/ 16 сентября 2011

Вы можете использовать OUTPUT, например:

DECLARE @tmp TABLE (Id int not null)
UPDATE TOP (1) [YourTable]
SET [YourColumn] = newValue
OUTPUT inserted.Id INTO @tmp

SELECT * FROM @tmp

(добавить больше столбцов, чтобы удовлетворить)

Обратите внимание, что INTO здесь необходимо в случае general , чтобы избежать проблем с триггерами; в противном случае часто можно увидеть:

В целевой таблице 'YourTable' оператора DML не может быть никаких включенных триггеров, если оператор содержит предложение OUTPUT без предложения INTO.

3 голосов
/ 16 сентября 2011

Вы можете использовать предложение output .

update top (1) T
set Col = 'x'
output inserted.*
from YourTable as T
1 голос
/ 16 сентября 2011

Да. Возможно .

DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25,
ModifiedDate = GETDATE() 
OUTPUT inserted.BusinessEntityID,
   deleted.VacationHours,
   inserted.VacationHours,
   inserted.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO 
--Display the result set of the table.
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

см .: http://msdn.microsoft.com/en-us/library/ms177523.aspx#CaptureResults

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...