簡體   English   中英

如何基於子查詢中的EXISTS更新臨時表中的1列?

[英]How to update 1 column in a temp table based on an EXISTS in a sub-query?

如何基於子查詢中的EXISTS更新臨時表中的1列?

我正在使用SQL Server 2008 R2,大約有3000行..所以我需要它要快

這有效..但是我不知道從這里去哪里。

SELECT ROW_NUMBER() OVER(ORDER BY RowID) AS RowNumber 
FROM #tempTable

我如何基於實際上也是2個聯接表的另一個子查詢來更新#tempTable的1列?

我在這里用ROW_NUMBER顯示的內容是否屬於WHERE子句?

我試圖消除現有存儲過程中的WHILE循環,但從未使用過ROW_NUMBER

現有程序:

   DECLARE @StopRow AS INT

    SELECT @StopRow = MAX(RowID)
    FROM #Temp1

    DECLARE @RowCounter AS INT

    SET @RowCounter = 1

    DECLARE @colID INT

    WHILE (@RowCounter <= @StopRow)
    BEGIN
        SELECT @colID = colID
        FROM #Temp1
        WHERE colRowID = @RowCounter

        IF (
                EXISTS (
                    SELECT ParentColID
                    FROM ParentTable a WITH (NOLOCK)
                    JOIN MoreTableData b WITH (NOLOCK) ON a.priID = b.priID
                        AND colID = @colID
                    WHERE anotherID NOT IN (
                            SELECT anotherID
                            FROM @anotherTempTable
                            )
                    )
                )
            UPDATE #Temp1
            SET aFlag = 0
            WHERE colRowID = @RowCounter

        SET @RowCounter = @RowCounter + 1
    END

可能會有所幫助: 使用SQL Server從SELECT更新

因此,您可以使用自定義表達式來批量更新記錄

您的查詢似乎正確,但可能存在一些格式問題。

試試這個改變的查詢。

DECLARE @StopRow AS INT

SELECT @StopRow = MAX(RowID)
FROM #Temp1

DECLARE @RowCounter AS INT

SET @RowCounter = 1

DECLARE @colID INT

WHILE (@RowCounter <= @StopRow)
BEGIN
    SELECT @colID = colID
    FROM #Temp1
    WHERE colRowID = @RowCounter

    IF  EXISTS (
                SELECT ParentColID
                FROM ParentTable a WITH (NOLOCK)
                JOIN MoreTableData b WITH (NOLOCK) ON a.priID = b.priID
                    AND colID = @colID
                WHERE anotherID NOT IN (
                        SELECT anotherID
                        FROM @anotherTempTable
                        )
            )

   BEGIN
        UPDATE #Temp1
        SET aFlag = 0
        WHERE colRowID = @RowCounter
   END

    SET @RowCounter = @RowCounter + 1
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM