社区
C++ Builder
帖子详情
SQL Server2000中是否有 Oracle中的 序列 的概念
wt_sanlian
2007-04-11 08:12:03
rt
...全文
256
9
打赏
收藏
SQL Server2000中是否有 Oracle中的 序列 的概念
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
痞子酷
2007-04-13
打赏
举报
回复
局域网:
客户端唯一标识有代表性的有:
1。IP:16进制,8个字符
2。登陆用户名ID:一般登陆名是唯一的。
等
wt_sanlian
2007-04-12
打赏
举报
回复
呵呵,
”如果有事务时和回滚时麻烦,导致异常问题“ 可以展开说一下吗?
如果用客户端唯一标识的话,客户端唯一标识应存储在什么地方呢,
痞子酷
2007-04-12
打赏
举报
回复
这种方法不好,如果有事务时和回滚时麻烦,导致异常问题。
最好的每一个客户端都要定义唯一行标识。进程根据唯一标识很容易获得唯一序列。
比如:
客户端唯一行标识+YYMMDDHHMI+进程定义的循环序列。
wt_sanlian
2007-04-12
打赏
举报
回复
上网上查了一下,就是自已建立一个表,有一个字段叫KeyName,另一个叫KeyVal
KeyVal 用于保存最新值,获取新的ID时用下面的方法:
declare @keyName varchar(64)
declare @keval int
set @keyname = 'mykey'
update MyKeyTable Set @keyval = keyval = keyval + 1 where keyname = @keyname
select @keyval as newkey
对@keyval 赋值是在一个Update语句中进行的,Update执行在SQL 中应当是原子性的吧!
个人觉得这种方法可以避免多客户端同时生成主键冲突的问题,
大虾们,有没有什么不同观点
wt_sanlian
2007-04-11
打赏
举报
回复
谢谢三十年孤独及我又...
我不想用IDENTITY,主键想自已定义成字符型的,但有多个客户端可能同时对表进行插入,
如果SQL Server 中要有象Oracle中的序列的话就可以解决主键冲突,可SQLServer中好象没有这种东西
sczyq
2007-04-11
打赏
举报
回复
INT NOT NULL IDENTITY
chpst
2007-04-11
打赏
举报
回复
lgjf
我不懂电脑
2007-04-11
打赏
举报
回复
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表值得注意。
痞子酷
2007-04-11
打赏
举报
回复
SQL Server2000中是否有 Oracle中的 序列 的概念
------------------------------
可以说无。
oracle sequence 非常好用。
SQL Server2000 IDENTITY不好用。
我记得SQL Server最初序列我是这样处理的。这是很多年以前的事啦。
客户端唯一标识+日期时间+加上进程自定义的递增序列。
呵呵~~~
sql
server
中
创建类似
oracle
序列
的存储过程
介绍
sql
server
中
创建类似于
oracle
中
序列
的过程,此例只是一个简单的模仿。
深度对比
Oracle
与
SQL
Server
深度对比
Oracle
与
SQL
Server
SQL
SERVER
安装
ORACLE
provider for OLE DB 的连接服务驱动.zip
在为
SQL
SERVER
创建
ORACLE
的连接服务器时,没有
ORACLE
provider for OLE DB 的连接服务驱动。经网上搜索,把PDF安装说明和驱动程序一起收藏,请各位下载;
从
SQL
Server
向
Oracle
迁移的技术实现方案
实现了数据从
SQL
Server
向
Oracle
数据库的迁移
Oracle
与
SQL
Server
的
SQL
语法差异总结1
Oracle
与
SQL
Server
的
SQL
语法差异总结1
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章