[英]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.