Sql server 如何设置偶数行和奇数行的值?

Sql server 如何设置偶数行和奇数行的值?,sql-server,Sql Server,我有下表 db_name server_name approver cube1 server1 cube1 server2 cube2 server3 cube2 server4 我想更新每一偶数行上的approver列,假设索引从0开始,奇数行开始,如下所示: 偶数第1行:approver1 第二排单数:2 我的最终目标是让桌子看起来像这样 db_name server_name approver cube1 server1 approver1 cube1 s

我有下表

db_name server_name approver
cube1   server1 
cube1   server2 
cube2   server3 
cube2   server4 
我想更新每一偶数行上的approver列,假设索引从0开始,奇数行开始,如下所示:

偶数第1行:approver1 第二排单数:2

我的最终目标是让桌子看起来像这样

db_name server_name approver
cube1   server1 approver1
cube1   server2 approver2
cube2   server3 approver1
cube2   server4 approver2
我没有主键/ID列,也不打算包含主键/ID列

从这句话开始,我怎样才能实现我想要的

UPDATE Table1
SET approvers = 'approver1'
GO 

可以使用and,但此处需要id列

像这样的东西还没有测试过。你甚至需要同样的东西

-从奇数中获取所有ID 使用TableData作为 选择ID,按ID ASC排序的行号作为行号 来自表1 其中,行数%2=1-奇数 -使用approver1更新奇数 更新表集审批人='approver1' 来自表1 Table1.ID上的内部联接TableData=TableData.ID
只是另一个选择

范例

更新后的表


哪个列或列组合定义了顺序?db_名称、服务器_名称是键吗?因此是唯一的?如果不是,则是哪列或列组合?@stickybit没有列定义顺序。当我选择的时候,我可以像我在帖子中的表格一样返回所有的行,所以我只是依靠自然排序。此外,db_name、server_name都不是键。我的表中没有任何主键没有顺序,没有键,没有可靠的机会做你想做的事情。我认为默认情况下,这是硬盘上的物理顺序,可以在更新/删除/恢复DB/DB文件分区后重新定位。你能详细说明你的意思吗?假设DB_name上的分区/重置OHH我明白你的意思。这实际上是一个很好的思考方式,不是偶数/奇数,而是每一个新的db_名称…唯一的问题是如何将第二个db_名称设置为approver2?问题:关于代码的开头;这真的是以分号开始的吗?我不确定它是否是某个东西的延续,或者语法实际上是这样的,这是我第一次遇到这样的东西。这一个,NewValue,以commaquestion开头;NewValue在我的情况下是否为approver1?approver1=concat我的问题是,sql语句中的哪一个是approver1和approver2?我不知道它们是如何插入的,我查看了fiddle,看到您创建了一个表,approver列值设置为null,但我不知道您最终如何插入approver1和approver2,但您需要一个id列,所以在我的情况下,我不能使用此方法,对吗?如果框确实存在,则不显示
;with cte as (
Select *
      ,RN= Row_Number() over (Order By db_name,server_name) % 2
 From  YourTable
 )
 Update cte
    Set approver = case when RN=1 then 'ApproverX' else 'ApproverY' end
db_name server_name approver
cube1   server1     ApproverX
cube1   server2     ApproverY
cube2   server3     ApproverX
cube2   server4     ApproverY