[英]How to update 1 column in a temp table based on an EXISTS in a sub-query?
How to update 1 column in a temp table based on an EXISTS
in a sub-query? 如何基于子查询中的EXISTS
更新临时表中的1列?
I am using SQL Server 2008 R2 and there are about 3000 rows.. so I need it to be fast 我正在使用SQL Server 2008 R2,大约有3000行..所以我需要它要快
This works.. but I don't know where to go from here.. 这有效..但是我不知道从这里去哪里。
SELECT ROW_NUMBER() OVER(ORDER BY RowID) AS RowNumber
FROM #tempTable
How would I update 1 column in this #tempTable
based on another subquery that is actually also 2 joined tables? 我如何基于实际上也是2个联接表的另一个子查询来更新#tempTable
的1列?
Does what I have shown here with ROW_NUMBER
belong in the WHERE
clause? 我在这里用ROW_NUMBER
显示的内容是否属于WHERE
子句?
I am trying to eliminate a WHILE
loop in an existing stored procedure and I have never worked with ROW_NUMBER
我试图消除现有存储过程中的WHILE
循环,但从未使用过ROW_NUMBER
Existing Procedure: 现有程序:
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
It may be helpful: UPDATE from SELECT using SQL Server 可能会有所帮助: 使用SQL Server从SELECT更新
So, you can use custom expressions for bulk UPDATE of the records 因此,您可以使用自定义表达式来批量更新记录
It seems that your query in correct but may be there is some formatting issue. 您的查询似乎正确,但可能存在一些格式问题。
Try this changed query. 试试这个改变的查询。
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.