SQL Server2000中是否有 Oracle中的 序列 的概念,该如何解决

SQL Server2000中是否有 Oracle中的 序列 的概念
rt

------解决方案--------------------
IDENTITY 和 SEQUENCE

Sql Server中,定义一个列为递增列很容易,但我在Oracle中却怎么也找不到设置的方法。不过查了点资料后知道Oracle中有个叫Sequence的对象,产生一个唯一的序列号,类似于Sql Server中的IDENTITY。于是,我做了如下实验:



首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL语句如下:

create sequence TEST_SEQ

minvalue 100

maxvalue 999

start with 102

increment by 1

nocache;



语法应该是比较易懂的,最小最大值分别用minvalue,maxvalue表示,初始值是102(这个数字是动态变化的,我创建的时候设的是100,后因插入了2条数据后就自动增加了2),increment当然就是步长了。在PL/SQL中可以用test_seq.nextval访问下一个序列号,用test_seq.currval访问当前的序列号。



定义完了Sequence,接下来就是创建一个存储过程InsertRecordWithSequence:

--这次我修改了test表的定义,和前面的示例不同。其中,UserID是PK。

create or replace procedure InsertRecordWithSequence(UserID out number,

UserName in varchar2,

UserAge in number)

is

begin

insert into test(id, name, age) --插入一条记录,PK值从Sequece获取

values(test_seq.nextval, UserName, UserAge);

/**//*返回PK值。注意Dual表的用法*/

select test_seq.currval into UserID from dual;

end InsertRecordWithSequence;



接下来,就是在C#中进行调用了:

string connectionString = "Data Source=YXZHANG;User ID=YXZHANG;Password=YXZHANG ";

string queryString = "InsertRecordWithSequence ";

OracleConnection cn = new OracleConnection(connectionString);

OracleCommand cmd = new OracleCommand(queryString,cn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add( "UserID ",OracleType.Number);

cmd.Parameters[ "UserID "].Direction = ParameterDirection.Output;

cmd.Parameters.Add( "UserName ", "Jack ");

cmd.Parameters.Add( "UserAge ",40);



try

{

cn.Open();

int rowAffected = cmd.ExecuteNonQuery();

Console.WriteLine( "{0}行已插入。 ",rowAffected);

Console.WriteLine( "插入行的ID为:{0} ",cmd.Parameters[ "UserID "].Value.ToString());

cn.Close();

}

catch( OracleException ex )

{

Console.WriteLine( "Exception occurred! ");

Console.WriteLine( "The exception message is:{0} ",ex.Message.ToString());

}

finally

{

Console.WriteLine( "------------------End------------------- ");

}

小结:

使用Sequece对象可以很容易地创建唯一序列,在存储过程中的调用也十分方便,只要sequence_name.nextval以及sequence.currval就能得到下一个以及当前的序列值。倒是Dual表值得注意。

------解决方案--------------------
局域网:
客户端唯一标识有代表性的有:
1。IP:16进制,8个字符
2。登陆用户名ID:一般登陆名是唯一的。