首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

想在表里面增加一列序号,请教各位咋个子整

2012-12-16 
想在表里面增加一列序号,请问各位咋个子整?我有个表tableName,里面大概存放了10万数据,现在我想在这个表里

想在表里面增加一列序号,请问各位咋个子整?
我有个表tableName,里面大概存放了10万数据,现在我想在这个表里面增加一列序号(xh),xh从1,2,3,4……10万编号

我采用的方式是,select row_number() over (order by jssj) as xh,jjdid into #aa from tableName
然后 update tableName set xh=b.xh from tableName a, #aa b where a.jjdid=b.jjdid

但是我发现这个jjdid有重复的,所以里面的序号xh也就有重复的,没有达到预期效果。

请教各位大侠了。大概实现如下效果1,2,3,4……10万,不打乱原来存储的顺序

[最优解释]
大概格式如下:

;
WITH    cte
          AS ( SELECT   row_number() OVER ( ORDER BY GETDATE() ) AS xh ,
                        *
               FROM     tableName WITH ( NOLOCK )
             )
    UPDATE  tableName
    SET     xx = xx
    FROM    tableName a
            INNER JOIN cte b ON a.主键 = b.主键

[其他解释]
那这个出来的不就是你要的咯?
SELECT  row_number() OVER ( ORDER BY GETDATE() ) AS xh ,
         *
 FROM    tableName WITH ( NOLOCK )

[其他解释]
ORDER BY GETDATE() 这个东西一般是在没有什么列可以row_number时使用,由于getdate()即使同一时刻,都是自上而下,所以产生的ID是顺序的。
[其他解释]


alter table tableName
  add column ID int identity(1,1)

[其他解释]
加一列,设为自增,然后 
insert into 目标表(除自增外的字段) 
select 除自增外的字段 from tableName
[其他解释]
这个顺序是你想要的吗?
select row_number() over (order by getdate()) as xh,jjdid into #aa from tableName

[其他解释]
引用:
引用:SQL code1234alter table tableName  add column ID int identity(1,1)
我是要把之前的这些数据排个序号,这个只能是之后插入的嘛

这个并不是之后插入
这句执行之后,表就会多加一排序列了
[其他解释]
引用:
引用:那我3楼那个可以了。
不想让他自增啊,可能会影响一些程序的使用

SET IDENTITY_INSERT TableName OFF
那你可以,插入后取消自增
[其他解释]
你用个cte临时存放嘛,然后update源表

引用:
引用:
ORDER BY GETDATE() 这个东西一般是在没有什么列可以row_number时使用,由于getdate()即使同一时刻,都是自上而下,所以产生的ID是顺序的。

么怎么update嘛?

------其他解决方案--------------------


21楼是对的
[其他解释]

引用:
临时建个主键得了,谢谢大家了。尤其是DBA_Huangzj


我还有个问题,新建的序号xh在最后,我怎么样把他调整到第一列的位置啊?
如果你是想展示的时候第一列,那就select xh,.....这样咯,其实表上的列无关紧要的。或者你创建了列之后,在SSMS里面调一下也可以
[其他解释]
引用:
引用:大概格式如下:SQL code12345678910;WITH    cte          AS ( SELECT   row_number() OVER ( ORDER BY GETDATE() ) AS xh ,                        *               FROM     tabl……
没有主键,没有唯一性约束列么?那怎么确保数据的一致性、唯一性 呢?
[其他解释]
引用:
引用:
大概格式如下:SQL code12345678910;WITH    cte          AS ( SELECT   row_number() OVER ( ORDER BY GETDATE() ) AS xh ,                        *               FROM     tableName WITH ……
主键不一定是一个ID啊,你的表中组合几个列应该也可以作为主键的
[其他解释]
引用:
SQL code1234alter table tableName  add column ID int identity(1,1)

我是要把之前的这些数据排个序号,这个只能是之后插入的嘛
[其他解释]
引用:
加一列,设为自增,然后 
insert into 目标表(除自增外的字段) 
select 除自增外的字段 from tableName

然后把目标表里面的整到tableName表里面?
这样不会改变现在的存储顺序?这个顺序很重要。而且这个过程中可能有人在用我的这个tableName表
[其他解释]
引用:
这个顺序是你想要的吗?SQL code1select row_number() over (order by getdate()) as xh,jjdid into #aa from tableName

最好不是,之前程序出错了,好多时间在前台update的时候都设置为相同的了,顺序最好是select * from tableName with(nolock)出来的这个顺序,谢谢了
[其他解释]
那我3楼那个可以了。
[其他解释]
引用:
引用:引用:SQL code1234alter table tableName  add column ID int identity(1,1)
我是要把之前的这些数据排个序号,这个只能是之后插入的嘛
这个并不是之后插入
这句执行之后,表就会多加一排序列了

我不要让他自增
[其他解释]
引用:
那我3楼那个可以了。

不想让他自增啊,可能会影响一些程序的使用
[其他解释]
该回复于2012-11-05 19:25:29被管理员删除
[其他解释]
引用:

那这个出来的不就是你要的咯?SQL code123SELECT  row_number() OVER ( ORDER BY GETDATE() ) AS xh ,         * FROM    tableName WITH ( NOLOCK )


嗯,怎么写进去?还有请教你个东西ORDER BY GETDATE()具体代表什么?谢谢你了
[其他解释]
引用:
引用:引用:那我3楼那个可以了。
不想让他自增啊,可能会影响一些程序的使用
SET IDENTITY_INSERT TableName OFF
那你可以,插入后取消自增

明天我试试
[其他解释]
引用:
ORDER BY GETDATE() 这个东西一般是在没有什么列可以row_number时使用,由于getdate()即使同一时刻,都是自上而下,所以产生的ID是顺序的。


么怎么update嘛?
[其他解释]
引用:
你用个cte临时存放嘛,然后update源表

引用:引用:
ORDER BY GETDATE() 这个东西一般是在没有什么列可以row_number时使用,由于getdate()即使同一时刻,都是自上而下,所以产生的ID是顺序的。

么怎么update嘛?

我tableName里面有如下列:
jjdid,ysdbh,sdrxm,sdrdm,rylszh,ywbm,scb,tjsj,jsrxm,jsrdm,ztbz,yxbz,wwzt,xh
[其他解释]
引用:
你用个cte临时存放嘛,然后update源表

引用:引用:
ORDER BY GETDATE() 这个东西一般是在没有什么列可以row_number时使用,由于getdate()即使同一时刻,都是自上而下,所以产生的ID是顺序的。

么怎么update嘛?


没玩过什么CTE的,with什么的那个?你帮我写一个代码嘛
[其他解释]
临时建个主键得了,谢谢大家了。尤其是DBA_Huangzj


我还有个问题,新建的序号xh在最后,我怎么样把他调整到第一列的位置啊?
[其他解释]
引用:
大概格式如下:SQL code12345678910;WITH    cte          AS ( SELECT   row_number() OVER ( ORDER BY GETDATE() ) AS xh ,                        *               FROM     tableName WITH ( NOLOCK )   ……

麻烦就麻烦在这个表根本没有主键,不知道用什么关联了,数据库设计的有问题。
[其他解释]
引用:
引用:引用:
大概格式如下:SQL code12345678910;WITH    cte          AS ( SELECT   row_number() OVER ( ORDER BY GETDATE() ) AS xh ,                        *   ……


这个太难了,这表设计就有问题,吸取教训,以后自己设计的时候好好设计。

这里有一个修改列位置的博客,谢谢大家了。http://blog.csdn.net/vivianfdlpw/article/details/492112

热点排行
Bad Request.