Как обновить TOP 400? - PullRequest
       4

Как обновить TOP 400?

9 голосов
/ 31 августа 2009

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

UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
  AND column1 is null

Ответы [ 6 ]

9 голосов
/ 31 августа 2009
 UPDATE db.dbo.tbl SET column1 = 2 WHERE
 primaryID IN (
   SELECT TOP (400) primarkyID FROM db.dbo.tbl
   WHERE column2 = 1 AND column1 IS NULL
 )

Но мне это не нравится, так как нет способа гарантировать, ЧТО 400 лучших, возможно, вы захотите добавить какой-то другой тип критериев. И даже Order By в подзапрос.

5 голосов
/ 31 августа 2009
WITH    q AS
        (
        SELECT  TOP 400 *
        FROM    db.dbo.tb
        WHERE   column2 = 1
                AND column1 is null
        ORDER BY
                column3 -- choose your order!
        )
UPDATE  q
SET     column2 = 2
5 голосов
/ 31 августа 2009

Как бы вы определили топ 400? Без заказа нет гарантии, что один и тот же набор будет всегда выбран, и, следовательно, неправильные записи могут быть обновлены.

4 голосов
/ 31 августа 2009

Если вы используете SQL Server 2008, синтаксис «top n» будет работать для операторов удаления и обновления. В противном случае другие методы, перечисленные здесь, где вы идентифицируете первичные ключи в подзапросе или производной таблице, будут работать хорошо. И как уже сделали другие, настоятельно рекомендуется "упорядочить по", или строки, которые вы обновляете, могут отличаться от одного запроса к следующему.

4 голосов
/ 31 августа 2009

Вы, вероятно, ищете что-то вроде этого:

update db.dbo.tbl set column1 = 2 
where ID in (
  select top 400 ID from db.dbo.tbl
  where column2 = 1 and column1 is null --the criteria have been moved here
  order by ID --order by clause recommended
  )

где ID - столбец первичного ключа таблицы.

1 голос
/ 14 февраля 2010

Вы можете использовать следующий синтаксис

ОБНОВЛЕНИЕ top (400) tbl SET column1 = '2' ГДЕ column2 = '1' И столбец1 равен нулю

Посмотреть это сообщение http://balasingam.com/sql-server/update-top-n-record-in-sql-server/comment-page-1#comment-227

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