如何通过在Select语句中生成一个自增的唯一ID字段?(50分)

  • 主题发起人 主题发起人 nzfsoft
  • 开始时间 开始时间
N

nzfsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我的目的是通过产生唯一的ID,来为进一步分页面提取符合条件的记录做准备
比如:原句select Name from A会有10万条符合条件的记录。

如何在原句中生成一个ID字段呢?
 
COUNTER 数据类型

COUNTER 数据类型用来存储长整型数值,该数值在表中每增加一条新的纪录时能够自动增加。
使用COUNTER 数据类型,用户可以设定一个种子值和增加值,
种子值是当第一个记录插入到表中时将输入到域中的数值,
而增加值用来加到上一个记数值上作为下一个记数值。
如果没有指定种子值和增加值,它们都将缺省的使用1
。在一个表中只能有一个COUNTER域。
其同义字有 COUNTER、AUTOINCREMENT和IDENTITY。

下面的 CREATE TABLE 语句展示了通过Access SQL View 用户界面创建表时使用的COUNTER 数据类型的同义字。

CREATE TABLE tblUICounterDataTypes (
Field1 COUNTER,
Field2 TEXT(10))


注意这里没有指定种子值和增加值,所有都将采用缺省值1。定义COUNTER 数据类型的另一种方式是使用AUTOINCREMENT 关键字,如下所示:

CREATE TABLE tblUICounterDataTypes (
Field1 AUTOINCREMENT(10,5),
Field2 TEXT(10))


这一次种子值和增加值都指定了,则开始值时10,每次将加5。
上面的SQL 语句也可以通过Jet OLE DB provider 和 ADO执行,
另外还有counter 数据类型的另一种形式,只能通过Jet OLE DB provider 和 ADO来执行,即IDENTITY 关键字,
它和SQL Server的 IDENTITY 数据类型是相兼容的。

CREATE TABLE tblCodeCounterDataTypes
Field1_IDENTITY IDENTITY(10,5),
Field2 TEXT(10))

 
select Nax(ID)+1 from A
 
to nzfsoft:
不知道你的问题是否应为“如何通过在sql语句中生成一个自增的唯一ID字段”
如果是应该再表中建立一个Identity类型的字段,语法如上

如果问题不是这样
我的疑问在一个表中实现查询后再插入字段再填充数据?应用有问题吧?
如果非要实现用还是用过程实现吧

 
楼上的很正确!
 
select identity(int,1,1) as tmpid,*
into #temp
from tablename
生成临时表
select *
from #temp
where tmpid>200 and tmpid<=300
从临时表取出想要的数据
 
来晚了,同意QuickSilver
 
是这样的,原来的表中没有这的ID字段。
我想用SQL在我取出的记录中动态生成这样的ID字段[:D]
 
我的想法是这样。
原来SQL:select Name from A ->有10万条记录。(原表没有ID字段)
我想形成这样:select Name from A where ID>100 and ID<10000.(当然这句是不对的)
 
可以用游标来实现
 
试问这样的SQL语句效率如何:(要取出901-1000的记录)
select TOP 1000 * from A where not in(select Top 900 * from A)

从SQL上来看。好想效率不行。因为要执行两遍Select +一次按序比较。

请大侠斧正。。。。
(可以如何优化。在各个数据库平台分别如何?)
 
另外,补充一点:
我这个形成ID的方法。不要以物理表来做。
要纯粹用SQL在内存中实现,不知道行不行?
另外游标也不想用。效率也不高吧?
 
LEFT(CAST(NEWID() AS CHAR(100)),10)
 
select (select cast(max(字段名) as integer)+1 from 数据库名) as id
from 数据库名
 
有答案了
select (select count(*) from table1 where name<=a.name),
a.name from table1 a order by a.name
在sql server 7/2000 中都正确
 
试问这样的SQL语句效率如何:(要取出901-1000的记录)
select TOP 1000 * from A where not in(select Top 900 * from A)

从SQL上来看。好想效率不行。因为要执行两遍Select +一次按序比较。

请大侠斧正。。。。
(可以如何优化。在各个数据库平台分别如何?)

 
还是都检索出来,然后定位游标吧
 
试问这样的SQL语句效率如何:(要取出901-1000的记录)
select TOP 1000 * from A where not in(select Top 900 * from A)

从SQL上来看。好想效率不行。因为要执行两遍Select +一次按序比较。

请大侠斧正。。。。
(可以如何优化。在各个数据库平台分别如何?)
 
后退
顶部