有条件地更新SQL Server中的一条记录

时间:2016-06-08 07:22:20

标签: sql sql-server tsql sql-update

我将以下结果存储在临时表#tempResult

SourceGuid           SourceTypeID         IsSelected
-------------------- -------------------- ----------
84588BAF068320450908      129                  0
5367D0F80A0F4040E909      658                  0    <
872791440CDBE04F7C0B      658                  0    <
15ABA6B70E4A70463E0B      887                  0
1DE39F9805A8A044B20B      887                  0
3F96C93501144041D50A      887                  0
6A01DFF705861049F509      887                  0

我需要将IsSelected值设为中的1个而不是两个标记为<的记录,而不管其他任何条件,只需SourceTypeID = 658

如何实现这一目标,谢谢。

3 个答案:

答案 0 :(得分:2)

UPDATE tempResult 
    SET IsSelected = 1 
WHERE SourceGuid IN (
    SELECT SourceGuid 
    FROM tempResult 
    WHERE SourceTypeId = 658 
    LIMIT 1
)

答案 1 :(得分:1)

您可以使用CTE获取TOP 1,然后执行UDPATE

;WITH CTE AS(
    SELECT TOP (1) *
    FROM #tempResult
    WHERE SourceTypeId = 658
    ORDER BY NEWID()
)
UPDATE CTE SET IsSelected = 1

ORDER BY NEWID()表示随机排序。将NEWID()替换为您希望TOP所基于的列。

答案 2 :(得分:1)

您可以将ROW_NUMBER()CTE

一起使用
WITH CTE AS(
    SELECT t.*,
           ROW_NUMBER() OVER(PARTITION BY t.SourceTypeID ORDER BY t.sourceGuid) as rnk
   FROM YourTable t)
UPDATE CTE
set IsSelected = 1
WHERE rnk = 1

如果您只想更新SourceTypeID = 658,那么这将是动态的并且适用于整个数据,然后添加WHERE子句:

WHERE SourceTypeId = 658

CTE