Обновление SQL Server 2000 на основе вложенного SELECT с TOP - PullRequest
1 голос
/ 05 февраля 2011

Я пытаюсь обновить таблицу SQL с количеством строк x из упорядоченного запроса, где x - это баланс 100000 - предыдущий результат. Я использую ROWCOUNT, чтобы ограничить количество результатов из-за того, что x является параметром, но не думаю, что это работает.

Кто-нибудь может предложить исправление или альтернативу без курсоров?

DECLARE @Top int
SET @Top = 100000 - @CountRecords

SET ROWCOUNT  @Top 

UPDATE 
    UpdateTable
SET 
    UpdateField = 'SomeValue'
WHERE 
    Id IN
    (
        SELECT
            TOP 100% Id
        FROM 
            SelectTable 
        WHERE 
            (SelectField1 IS NULL) AND
                    (SelectFieldDate IS NOT NULL)
            ORDER BY 
                    SelectFieldDate                         
    )

SET ROWCOUNT 0

1 Ответ

2 голосов
/ 05 февраля 2011

SET ROWCOUNT относится и к промежуточным результатам, поэтому может вводить в заблуждение

Если вы загружаете временную таблицу, вы можете обойти это, разделив обновление на 2 шага

DECLARE @Top int
SET @Top = 100000 - @CountRecords

SET ROWCOUNT  @Top 

SELECT Id
INTO #foo
FROM 
    SelectTable 
WHERE 
    (SelectField1 IS NULL) AND
            (SelectFieldDate IS NOT NULL)
ORDER BY 
    SelectFieldDate                

SET ROWCOUNT 0

UPDATE 
    UpdateTable
SET 
    UpdateField = 'SomeValue'
WHERE 
    Id IN
    (
        SELECT id FROM #foo
    )
...