【问题标题】:Alternate for select <sequence>.nextval from dual of Oracle in SQL Server?从 SQL Server 中的双重 Oracle 中选择 <sequence>.nextval 的替代方法?
【发布时间】:2012-01-23 09:33:15
【问题描述】:

有没有办法在 SQL Server 中创建唯一的序列号

select <sequence>.nextval from dual

我们有上面的 Oracle 代码,它将创建一个唯一的号码,并且该号码不能被任何其他人使用。

同理,如何在 SQL Server 中创建唯一的序列号????

有人帮我解决这个问题

【问题讨论】:

    标签: sql-server oracle unique-id


    【解决方案1】:

    在 SQL Server 2012 中添加了序列 - 但这还没有完全发布。如果您想提前试用,产品的候选发布版本中包含它们。

    如果序列只被单个表使用,那么您可以使用标识列功能,它允许您指定起始编号和每条记录添加的值。

    如果您正在寻找一个可以跨多个表使用的序列,您需要在 SQL Server 中创建一个专用表,该表具有一个标识字段的单列 - 并且只要您需要 .nextval,您将在表中插入一行以获得一个新数字。该表就像一个序列。表会随着时间的推移而填满,不需要在表中保留记录,身份存储它的当前值和增量以获得系统表上的下一个值。

    【讨论】:

    • 不,我想要多个表,它应该是唯一的。现在我使用的方式是首先在标识列中生成数据,然后从中获取数据。但我认为当您有 100 位用户同时提交表单时,这不是一个好的机制。
    • 你是对的 - 因为它不是一个很好的机制 - 它会模仿行为,但会产生开销,你必须通过一些负载测试来找出开销是否太大。
    【解决方案2】:

    只有即将推出的 SQL Server 2012 支持符合 sql 标准的序列对象。 :-( 在任何当前版本的 SQL Server(2008 R2 及更低版本)中,您必须使用具有标识约束的列,如下所示:

    CREATE TABLE t1
    (
       id       int identity(1,1),
       somecol  varchar(50)
    );
    

    这将在 id 列中生成从 1 开始并以 1 为增量递增的值。

    【讨论】:

    • 不,我想要多个表,它应该是唯一的。现在我使用的方式是首先在标识列中生成数据,然后从中获取数据。但我不认为当您有 100 名用户同时提交表单时,这是一个很好的机制。
    • 那么你不能像在 Oracle 中那样做(除非你等待 SQL Server 2012)!您可以在 C# 或 VB.NET 中创建用户定义的数据类型并导入程序集。
    猜你喜欢
    • 2014-08-17
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多