200分问一个SQLServer2000数据库的问题。

hanly2008 2003-06-11 02:03:11
在ORacle中可以创建一个序列(SEQUENCE)
CREATE SEQUENCE E001 START WITH 103 INCREMENT BY 1;
这样就可以用
Select E001.Nextval sID from DUAL每次得到一个自动增长1的且唯一的整数。

由于本人对SQLServer不熟,不知道在SQLServer2000中可不可以创建这样的SEQUENCE(序列),如何创建?

不要告诉我将某个字段设置成自动增长。我要的是建这样的一个序列。
...全文
32 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanly2008 2003-06-12
  • 打赏
  • 举报
回复
genphone_ru(哎,什么都要学,真累)的方法果然巧妙,呵呵
谢谢.
票票飞扬 2003-06-12
  • 打赏
  • 举报
回复
SQL Server中没有序列功能,但有@@IdentityID全局变量,也不建议采用。
可以有这样一个方法来替换。
增加表:create table t_identityID(id int)
//插入一条数据(注意只有一条数据)
insert into t_identityID values(100) //从100开始

SQL语句:
declare @identityID int
update t_identityID set @identityID= id, id = id + 1
select @identityID

//第一次取到100,第二次取到101
hanly2008 2003-06-11
  • 打赏
  • 举报
回复
可能是翻译的问题吧,所以就只用SEQUENCE,而不说它是序列(确实跟SQL Server中的"序列"概念混淆).
在Oracle中的用"CREATE SEQUENCE E001 START WITH 100 INCREMENT BY 1"创建一个名为E001的SEQUENCE后,
第一次Select E001.Nextval sID from dual,sID返回100
第二次Select E001.Nextval sID from dual,sID返回101
...

不知道我这样描述Oracle中的SEQUENCE,大家能不能理解
cow8063 2003-06-11
  • 打赏
  • 举报
回复
SQL没有,也不知道,帮你UP
firetoucher 2003-06-11
  • 打赏
  • 举报
回复
sorry,不知道你说的序列.....具体是什么,和sql的identity()函数一样么?
射天狼 2003-06-11
  • 打赏
  • 举报
回复
主键最好不要用自增值的列,因为这样在备份数据表的时候会出现很多问题,尤其是用主键关联的表就更麻烦了。

个人建议:建一个字符串列,列值为:当前日期加上四位序列号。例:200306090001,后四位自增,当日期增加一天的时候,后四位重新从1开始。根据每天数据量的情况自已设置后面的位数。如果数量非常大可以加大位数。

确定主键值的时候可以用SQL语句:

string ls_curdate

ls_curdate = format(today(), "yyyymmdd") + "%"
select id from tablename where id like ls_curdate
如果没找到的话后四位为0001,否则加1。
firetoucher 2003-06-11
  • 打赏
  • 举报
回复
用@@IDENTITY
返回最后插入的标识值。

或者

IDENT_CURRENT
返回为任何会话和任何作用域中的指定表最后生成的标识值。

firetoucher 2003-06-11
  • 打赏
  • 举报
回复
或者用IDENTITY(函数)
只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。

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

firetoucher 2003-06-11
  • 打赏
  • 举报
回复
使用列的identity属性
下面的示例创建一个新表,该表将 IDENTITY 属性用于获得自动增加的标识号。

USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'new_employees')
DROP TABLE new_employees
GO
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)

INSERT new_employees
(fname, minit, lname)
VALUES
('Karin', 'F', 'Josephs')

INSERT new_employees
(fname, minit, lname)
VALUES
('Pirkko', 'O', 'Koskitalo')

bluespy 2003-06-11
  • 打赏
  • 举报
回复
up
fhuibo 2003-06-11
  • 打赏
  • 举报
回复
study
hanly2008 2003-06-11
  • 打赏
  • 举报
回复
继续等待......
SevenGo 2003-06-11
  • 打赏
  • 举报
回复
用存储过程自己写吧,MSSQL里没有
DelUser 2003-06-11
  • 打赏
  • 举报
回复
IdentityID是在设计表的时候就可以用了
你也可以在程序里写啊,在Query的BeforePost事件里写代码,
保存的时候取出当前最大的单号加一就可以了!
hanly2008 2003-06-11
  • 打赏
  • 举报
回复
谢谢,试试看!
hammer_shi 2003-06-11
  • 打赏
  • 举报
回复
m
票票飞扬 2003-06-11
  • 打赏
  • 举报
回复
SQL Server中没有序列功能,但有@@IdentityID全局变量,也不建议采用。
可以有这样一个方法来替换。
增加表:create table t_identityID(id int)

SQL语句:
declare @identityID int
update t_identityID set @identityID= id, id = id + 1
select @identityID

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧