2015-09-21 5 views
1

У меня есть таблица, которая имеет столбец processed, это значение равно нулю для отказа и 1 для успеха. Я хочу добавить третий временный случай, его значение равно 2.sql как выбрать и обновить в то же время

мой предыдущий запрос:

string query = "SELECT * FROM dbo.tableName WHERE processed = @processed"; 

Я хотел бы сделать обновление для строк, что это выбирает делает. Я могу сделать это из .net, конечно, но я хочу знать, есть ли один запрос, который может выбирать строки и одновременно обновлять столбец процесса.

Я работаю с SQL Server 2008

Этот вопрос гласит очень старое решение, которое является выходным, и я не мог открыть это мой сам.

+4

[Там] (http://stackoverflow.com/questions/1610509/getting-the-id-of-a-row-i-updated-in-sql -сервер) [есть] (http://stackoverflow.com/questions/6984631/sql-server-stored-procedure-that-returns-updated-records) [так] (http://stackoverflow.com/questions/700786/sql-update-a-row-and-return-a-column-value-with-1-query) [много] (http://stackoverflow.com/questions/1367018/get-updated-row) [дубликаты] (http://stackoverflow.com/questions/12414104/how-to-use-output-clause-of-sql-server-for-update) –

ответ

2

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

UPDATE dbo.tableName 
SET processed = 2 --or whatever you want.. 
OUTPUT inserted.* 
WHERE processed = @processed 

Из MSDN (ссылка выше):

Возвращает информацию из, или выражений, основанных на каждой строке влияет вставкой, UPDATE, DELETE, или MERGE. Эти результаты могут быть возвращается приложению обработки

+0

и возвратит ли это выбранные (обновленные) строки? –

+0

@MarcoDinatsoli - Теперь да .. –

+0

Я пытаюсь ... –

0

Я предполагаю, что вы хотите сделать какую-то блокировку атомной записи на выбранных строках. Не уверен в T-SQL, но в Oracle вы можете сделать это с помощью таблицы UPDATE SET PROCESSED = 2 WHERE условия RETURNING primary_key BULK COLLECT INTO. Затем сделайте select * для строк, ключи которых были сохранены в массиве.

Я думаю, что синтаксис T-SQL будет чем-то вроде таблицы UPDATE SET PROCESSED = 2 OUTPUT primary_key INTO temp_table WHERE условия.

+0

, поэтому вы предлагаете изменить базу данных моего предприятия на использование Oracle? –

+0

«Не уверен насчет T-SQL» - вопрос стоит на TSQL .. –

+0

серьезно прочитал мой жалобу на мета http://meta.stackoverflow.com/questions/305838/how-can-i-avoid-duplicates-that - типично типичная ситуация –

Смежные вопросы