[SQL] 어떻게 업데이트하고 위해 MS의 SQL을 사용하여합니다
SQL어떻게 업데이트하고 위해 MS의 SQL을 사용하여합니다
이상적으로는이 작업을 수행 할 수 :
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
영어로 : 나는 DB에서 상위 10 사용할 수 (상태 = 0) 메시지를 얻을 싶어 (상태 = 10)를 잠급니다. 우선 순위가 높은 메시지가 먼저 입수해야한다.
불행하게도 MS SQL 업데이트에서 ORDER BY 절을 허용하지 않습니다.
어쨌든 어떻게 이것을 회피하기 위해?
해결법
-
==============================
1.당신은 당신이 먼저 서브 쿼리에있는 사람 업데이트 한 후 우선 순위에 따라 정렬 된 상위 10의 ID를 얻고 하위 쿼리를 수행 할 수 있습니다
당신은 당신이 먼저 서브 쿼리에있는 사람 업데이트 한 후 우선 순위에 따라 정렬 된 상위 10의 ID를 얻고 하위 쿼리를 수행 할 수 있습니다
UPDATE messages SET status=10 WHERE ID in (SELECT TOP (10) Id FROM Table WHERE status=0 ORDER BY priority DESC);
-
==============================
2.
WITH q AS ( SELECT TOP 10 * FROM messages WHERE status = 0 ORDER BY priority DESC ) UPDATE q SET status = 10
-
==============================
3.나는 더 나은 방법으로이 제공하는 - 당신은 항상 신원 필드의 사치가 필요하지 않습니다 :
나는 더 나은 방법으로이 제공하는 - 당신은 항상 신원 필드의 사치가 필요하지 않습니다 :
UPDATE m SET [status]=10 FROM ( Select TOP (10) * FROM messages WHERE [status]=0 ORDER BY [priority] DESC ) m
등, 여러 테이블을 조인 ... - 당신이 원하는처럼 복잡 또한 하위 쿼리를 만들 수 있습니다
왜 이런 일이 더 좋다? 이 메시지 테이블의 아이덴티티 필드의 존재 (또는 다른 독특한 열)에 의존하지 않습니다. 그 표는 전혀 고유 키가없는 경우에도, 모든 테이블에서 상위 N 행을 업데이트 할 수 있습니다.
-
==============================
4.
UPDATE messages SET status=10 WHERE ID in (SELECT TOP (10) Id FROM Table WHERE status=0 ORDER BY priority DESC);
-
==============================
5.아래 의견에 명시된 바와 같이, 당신은 또한 SET의 ROWCOUNT 절을 사용하지만, 단지 SQL 서버 2014 세 이상 수 있습니다.
아래 의견에 명시된 바와 같이, 당신은 또한 SET의 ROWCOUNT 절을 사용하지만, 단지 SQL 서버 2014 세 이상 수 있습니다.
SET ROWCOUNT 10 UPDATE messages SET status = 10 WHERE status = 0 SET ROWCOUNT 0
추가 정보 : http://msdn.microsoft.com/en-us/library/ms188774.aspx
또는 임시 테이블
DECLARE @t TABLE (id INT) INSERT @t (id) SELECT TOP 10 id FROM messages WHERE status = 0 ORDER BY priority DESC UPDATE messages SET status = 10 WHERE id IN (SELECT id FROM @t)
from https://stackoverflow.com/questions/655010/how-to-update-and-order-by-using-ms-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은, 연결하여 두 개의 열 (0) | 2020.04.25 |
---|---|
[SQL] 이 별도의 열로 두 SQL 쿼리의 결과를 결합 (0) | 2020.04.25 |
[SQL] 오라클에 sequence.nextval와 테이블을 만들 [중복] (0) | 2020.04.25 |
[SQL] 어떻게 저장 프로 시저 SQL 서버 익스프레스 에디션의 모든 일을 실행? (0) | 2020.04.25 |
[SQL] 별명으로 그룹 (오라클) (0) | 2020.04.25 |