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

给字段安插编号

2013-12-26 
给字段插入编号表格的格式如下:idnameischeck1jack12tony23amanda34xiao45ming5问题1 :我如何先根据ID的顺

给字段插入编号
表格的格式如下:
id  name   ischeck
1   jack     1
2   tony     2
3   amanda   3
4   xiao     4
5   ming     5

问题1 :我如何先根据ID的顺序,给ischeck的列插入编号呢?语句怎么写,注意:我的id不一定是1、2、3   可能一开始就是4、5、6 但是我的ischeck必须是从1开始

插入如上表的编号以后,因为我表格的排序要用ischeck来排序,当我要在id为2、3 中间插入一个值 ,其实就是给ischeck 重新编号我该怎么弄,效果如下表显示

id  name   ischeck
1   jack     1
2   tony     2
3   amanda   4
4   xiao     5
5   ming     6
6   tao      3

这样的更新语句怎么写?求各位帮忙!答者给分!谢谢! 
[解决办法]
05以上的用rownumber()over(order by id)
[解决办法]
2005及以上版本可以这样生成

----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-24 14:24:18
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
--Dec 28 2012 20:23:12 
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([id] int,[name] varchar(6),[ischeck] int)
insert [huang]
select 1,'jack',null union all
select 2,'tony',null union all
select 3,'amanda',null union all
select 4,'xiao',null union all
select 5,'ming',null
--------------开始查询--------------------------

select ID,NAME,ROW_NUMBER()OVER(ORDER BY id)[ischeck]
 from [huang]
----------------结果----------------------------
/* 
ID          NAME   ischeck
----------- ------ --------------------
1           jack   1
2           tony   2
3           amanda 3
4           xiao   4
5           ming   5
*/

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

为什么6   tao      3这条等于3?

因为我的ID另有用途 在不能改变ID的情况下 我用Ischeck来排序  sql2000有什么办法不?





if object_id('[tb]') is not null drop table [tb]
go 

create table [tb]([id] int,[name] varchar(6),[ischeck] int)

insert [tb]
select 1,'jack',null union all
select 2,'tony',null union all
select 3,'amanda',null union all
select 4,'xiao',null union all
select 5,'ming',null
go

select ID,NAME,
       (select COUNT(*) from tb t2 where t1.id >= t2.id) as ischeck
from [tb] t1


/*
IDNAMEischeck
1jack1
2tony2
3amanda3
4xiao4
5ming5
*/

select 1,'jack',null union allselect 2,'tony',null union allselect 3,'amanda',null union allselect 4,'xiao',null union allselect 5,'ming',null  这个我是不是数据库有几条我就要都拆开来写啊



哦,上面是构造实验数据,你直接运行这个查询试试,把表的名字改成你的,还有字段:
select ID,NAME,
       (select COUNT(*) from tb t2 where t1.id >= t2.id) as ischeck


from [tb] t1
 
 
/*
ID    NAME    ischeck
1    jack    1
2    tony    2
3    amanda    3
4    xiao    4
5    ming    5
*/


[解决办法]
问题1:

DECLARE @id VARCHAR(100), @ischeck VARCHAR(100);
BEGIN
DECLARE c_test_main CURSOR FAST_FORWARD FOR
select ID,ROW_NUMBER() over(order by id) from temp123;
OPEN c_test_main;
FETCH NEXT FROM c_test_main INTO @id, @ischeck;
WHILE @@fetch_status = 0
BEGIN
update temp123 set ischeck=@ischeck where id=@id;
FETCH NEXT FROM c_test_main INTO @id, @ischeck;
END;
CLOSE c_test_main;
DEALLOCATE c_test_main;
END;
go

热点排行