导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

请问我怎么SELECT出来一个流水号呢?从1开始,每一条+1,表里没有这个字段,要在SQL里生成,有办法吗?

jerry_huang 维苏威高级陶瓷(苏州)有限公司 商务系统经理  2003-12-23 04:55:15
谢谢!
...全文
36 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjt 2003-12-23
用游标可以实现
declare @temp varchar(10)
declare @i int
declare cur_test cursor
for
select column_name from tablename
open cur_test
set @i=0
fetch next from cur_test into @temp
while @@fetch_status=0
begin
set @i=@i+1
print CONVERT(varchar(30), @i)+' '+@temp
fetch next from cur_test into @temp
end

close cur_test
deallocate cur_test

结果如下
1 admin
2 swufe
3 lyh
回复
muge 2003-12-23
alter table 你的表名 add 增加的字段 int IDENTITY
回复
hmzgz81 2003-12-23
呵呵,不就是在前面加个序列吗!!!

identity(int,1,1)
回复
fanmb 2003-12-23
viptiger(六嘎) 和 devilwind(天空星) 的已經夠高效了
回复
xiaoBrother 2003-12-23
有更简单且高效率的方法吗?
回复
gmlxf 2003-12-23
如果你的table里面有唯一字段,或者是组合唯一字段.

现在比如t里面有一Sn字段是唯一的,那么
select (select count(*) from t where Sn<=a.Sn) 流水号,* from t a order by Sn

如果Sn1,Sn2构成唯一,那么
select (select count(*) from t where Sn1<=a.Sn1 and Sn2<=a.Sn2) 流水号,* from t a order by Sn1,Sn2


回复
solidpanther 2003-12-23
--自已做标识列的例子:

--创建得到最大id的函数
create function f_getid()
returns int
as
begin
declare @id int
select @id=max(id) from tb
set @id=isnull(@id,0)+1
return(@id)
end
go

--创建表
create table tb(id int default dbo.f_getid(),name varchar(10))
go

--创建触发器,在删除表中的记录时,自动更新记录的id
create trigger t_delete on tb
AFTER delete
as
declare @id int,@mid int
select @mid=min(id),@id=@mid-1 from deleted
update tb set id=@id,@id=@id+1 where id>@mid
go

--插入记录测试
insert into tb(name) values('张三')
insert into tb(name) values('张四')
insert into tb(name) values('张五')
insert into tb(name) values('张六')
insert into tb(name) values('张七')
insert into tb(name) values('张八')
insert into tb(name) values('张九')
insert into tb(name) values('张十')

--显示插入的结果
select * from tb

--删除部分记录
delete from tb where name in('张五','张七','张八','张十')

--显示删除后的结果
select * from tb

--删除环境
drop table tb
drop function f_getid
回复
viptiger 2003-12-23
alter table YouTable add col int IDENTITY
回复
victorycyz 2003-12-23
select *,identity(int,1,1) as id into #t from Tablename
select * from #t
drop table #t
回复
devilwind 2003-12-23
IDENTITY(函数)
只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。

尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

语法
IDENTITY ( data_type [ , seed , increment ] ) AS column_name

回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告