【问题标题】:Auto increment a primary key column自动增加主键列
【发布时间】:2018-06-05 14:36:33
【问题描述】:

我在我的 asp.net 应用程序中有一个包含“转帐号码”列的银行转帐页面。这是一个自动生成的列。我根据查询取这个值:

IF (SELECT COUNT(1) FROM tableName) = 0
    SELECT IDENT_CURRENT('tableName')
ELSE
    SELECT IDENT_CURRENT('tableName') + 1

问题是当两个用户登录时,该页面显示相同的转移号码。如何在插入记录前为不同用户显示不同的转帐号码?

谢谢。

【问题讨论】:

    标签: asp.net sql-server auto-generate


    【解决方案1】:

    将列设置为identity,值会自动生成,插入后可以从变量@@identity中获取插入的id。像这样

    表格设计

    CREATE TABLE YourTable
    (
    SeqNo INT IDENTITY(1,1) PRIMARY KEY,
    Col1 VARCHAR(50),
    Col2 INT,
    ...
    )
    

    我已将 SeqNo 列设置为身份和主键。

    Identity(1,1) 表示第一个值为 1,然后对于每一行,增量将为 +1,依此类推。

    现在我在表中插入一条记录

    INSERT INTO YourTable(Col1,Col2)
    values('abc',1)
    
    select @@identity
    

    现在插入后,第二次选择将返回值 1,因为标识字段的值为 1。

    如果我再运行一次,我会得到 2 次,以此类推

    您也可以在 @@IDENTITY 上调用系统定义的函数 SCOPE_IDENTITY()(如果涉及触发器)

    您可以使用它来避免冲突,因为这些值是由数据库本身生成的

    【讨论】:

    • 如果涉及触发器,最好使用 SCOPE_IDENTITY() 而不是 @@IDENTITY。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2010-12-09
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多