首页 > 解决方案 > 如何使用声明将 where 子句和/或 order by 添加到更新语句

问题描述

我目前正在使用下面的声明更新语句进行测试。这将从 1 到 501 以数字方式更新我的 StackCustomerAltID。但我需要弄清楚如何使用我的客户列以 asc 顺序添加 where 子句或订单。

这是我需要添加的 where 子句(其中 DelFlg = 0 和 Customer <> 'Spare')

declare @Var int
set @Var = 0
update StackCustomer
set @Var = StackCustomerAltID = @Var + 1

标签: sqlsql-server

解决方案


只是不要这样做。该行为未记录在案,可能会给您带来非常奇怪的结果。改用ROW_NUMBER

WITH CTE AS(
    SELECT StackCustomerAltID,
           ROW_NUMBER() OVER (ORDER BY Customer) AS RN
    FROM dbo.StackCustomer)
UPDATE CTE
SET StackCustomerAltID = RN;

推荐阅读