Sql 递增字符字段

Sql 递增字符字段,sql,tsql,sql-server-2005,Sql,Tsql,Sql Server 2005,我有一张表格,格式如下 Muser char(27), null privilege char(15), null Flags (smallint, null) MUSER Privilege Flags 1 ALL 0 1 ASSIGNEE 0 1 ALL 0 etc 我想将char列MUSER的值增加1 目前MUSER中的每条记录都有一个值1 更新后,增量MUSER应为 1 2 3 etc 如果可能的话,我会感谢tsql。这里有一种方

我有一张表格,格式如下

Muser  char(27), null
privilege char(15), null
Flags (smallint, null)

MUSER Privilege Flags
1     ALL       0
1     ASSIGNEE  0
1     ALL       0
etc
我想将char列MUSER的值增加1 目前MUSER中的每条记录都有一个值1

更新后,增量MUSER应为

1
2
3
etc

如果可能的话,我会感谢tsql。这里有一种方法,使用CTE和行数函数:

with toupdate (
      select t.*,
             row_number() over (order by (select NULL)) as seqnum
      from t
     )
update toupdate
    set Muser = cast(seqnum as varchar(255));
您没有指定订单。select NULL的顺序选择任意顺序


为什么要在字符字段中存储整数?您的数据结构似乎有问题。

您也可以尝试以下方法:


设置表中的每个值后,计划是什么?您是否计划将其更改为INT NOT NULL标识?如果没有,您将来打算如何处理新行?将其保留为1?如果数字为999999999999999999999999999999 8,我会看到问题:说来话长-有人在这里插手清理列以便在异地导出-将表更新为那里的值-但异地公司需要字段增量…无效的对象名称“t”??当cte_toupdate为select t.*时,通过从t update cte_toupdate set Muser=castseqnum AS varchar255中选择NULL作为seqnum,将订单上的行数设置为NULL@原意是用表名替换这个答案中对t的引用,因为您没有提供表名。Gordon使用t作为占位符表名。
declare @id char(27) 
update mytable set @id = muser = convert(int,isnull(@id,'0')) + 1 


--Results
| MUSER                       | PRIVILEGE       | FLAGS |
---------------------------------------------------------
| 1                           | ALL             |     0 |
| 2                           | ASSIGNEE        |     0 |
| 3                           | ALL             |     0 |