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