반응형
msql을 사용하여 업데이트 및 주문하는 방법
이상적으로 저는 이것을 하고 싶습니다.
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
영어: DB에서 사용 가능한 상위 10개의 메시지(status=0)를 가져와서 잠금(status=10)을 원합니다.우선 순위가 높은 메시지를 먼저 받아야 합니다.
안타깝게도 MS SQL은 업데이트에서 절별 주문을 허용하지 않습니다.
어쨌든 어떻게 이것을 피할 수 있습니까?
WITH q AS
(
SELECT TOP 10 *
FROM messages
WHERE status = 0
ORDER BY
priority DESC
)
UPDATE q
SET status = 10
우선 순위에 따라 상위 10개의 ID를 정렬한 다음 해당 하위 쿼리에 있는 ID를 업데이트하는 하위 쿼리를 수행할 수 있습니다.
UPDATE messages
SET status=10
WHERE ID in (SELECT TOP (10) Id
FROM Table
WHERE status=0
ORDER BY priority DESC);
저는 이것을 더 나은 접근 방식으로 제공해야 합니다. 당신이 항상 신분 분야의 사치를 누릴 수 있는 것은 아닙니다.
UPDATE m
SET [status]=10
FROM (
Select TOP (10) *
FROM messages
WHERE [status]=0
ORDER BY [priority] DESC
) m
또한 하위 쿼리를 원하는 만큼 복잡하게 만들 수 있습니다. 여러 테이블을 결합하는 등의 작업을 수행할 수 있습니다.
이게 왜 더 나은 거지?ID 필드(또는 다른 고유 열)의 존재에 의존하지 않습니다.messages테이블. 테이블에 고유한 키가 전혀 없더라도 테이블의 상위 N개 행을 업데이트하는 데 사용할 수 있습니다.
UPDATE messages SET
status=10
WHERE ID in (SELECT TOP (10) Id FROM Table WHERE status=0 ORDER BY priority DESC);
아래 설명과 같이 SQL Server 2014 이전 버전에만 SET ROWCOUNT 절을 사용할 수 있습니다.
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)
언급URL : https://stackoverflow.com/questions/655010/how-to-update-and-order-by-using-ms-sql
반응형
'programing' 카테고리의 다른 글
| HTML 페이지에서 엑셀 시트를 표시하는 방법 (0) | 2023.07.11 |
|---|---|
| PHP 7 MongoDB 클라이언트/드라이버를 설치하시겠습니까? (0) | 2023.07.11 |
| std::string length() 및 size() 멤버 함수 (0) | 2023.07.06 |
| ID가 'com.google.gms.google-services'인 플러그인을 찾을 수 없습니다. (0) | 2023.07.06 |
| NPM 설치 오류:'...nt-webpack-plugin":"0' 근처에서 구문 분석하는 동안 JSON 입력이 예기치 않게 종료되었습니다. (0) | 2023.07.06 |