当前位置: 代码迷 >> Sql Server >> 给字段插入编号解决思路
  详细解决方案

给字段插入编号解决思路

热度:43   发布时间:2016-04-24 18:59:04.0
给字段插入编号
表格的格式如下:
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


/*
ID NAME ischeck
1 jack 1
2 tony 2
3 amanda 3
4 xiao 4
5 ming 5
*/

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;
  相关解决方案