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 |