繁体   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