【问题标题】:How to get the next row number in MS SQL 2008如何在 MS SQL 2008 中获取下一个行号
【发布时间】:2011-10-19 18:46:36
【问题描述】:

如果有人能告诉我如何在SQL Server 2008 中获取数据库表中的下一个免费可用行号,我将不胜感激?

我想做的是实现类似于Oracle 的东西,其中序列号为新行提供下一个数字。搜索互联网,我没有找到任何与此匹配的内容,但我找到的是row_number()。不幸的是,我不能让它在 insert 语句中工作。

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:

    我认为您正在寻找的是 IDENTITY property 列。使用它可以让 SQL Server 自动分配您调用的行号。

    使用id 作为 IDENTITY 列的简单示例:

    DECLARE @MySampleTable TABLE (
        id INT IDENTITY(1,1) PRIMARY KEY,
        name VARCHAR(20)
    );
    
    INSERT INTO @MySampleTable
        (name)
        VALUES ('Andy5'), ('Joe');
    
    SELECT id, name
        FROM @MySampleTable;
    

    【讨论】:

      【解决方案2】:
      DECLARE @newId int;
      SET @newId = 0;
      
      select @newId = max(id) + 1
      from my_table;
      
      insert into my_table
      values(@newId, ...)
      
      ... more code ...
      

      将上面的代码包装在一个事务中,你就可以开始了。

      【讨论】:

        【解决方案3】:

        您真的想要行号还是只是在寻找 ID。

        在这种情况下,请查找标识列和 sql server。 http://www.dotnetfunda.com/articles/article753-identity-columns-in-sql-server.aspx

        或:http://www.sqlteam.com/article/autonumbering-identity-columns

        在这些情况下,在您的插入语句中,您没有指定 ID,sql server 会自动提供一个新的。

        成功

        【讨论】:

        • 对 SQL Server 2008 不太熟悉,因为我的经验是使用 Oracle 和 MySQL。所以,我很高兴得到任何帮助。我看到两个回复都在谈论 IDENTIY,但是由于我已经有一个数据类型为 int 和名称的表,因此可以在 INSERT 上按照 INSERT TABLE A VALUES (IDENTITY (1,1), 'A', '乙'); ?
        【解决方案4】:

        您必须在创建表时设置标识字段。然后,当您插入其中时,您会跳过该字段。插入类似于假设标识字段称为 table1id:

        Insert table1 (field1,field2)
        values('test','test2')
        

        现在身份有一些限制。即使回滚操作或删除记录,它也会用完一个数字,它不会重新使用它,因此会有间隙。这应该不重要,因为代理 ID 无论如何都不应该具有商业意义。

        【讨论】:

        • 是否可以通过 Entity Frameworks 4.0 设置身份?我们通过实体框架创建了表格。
        • 我不知道我永远不会允许任何人在 ORM 中创建表。那是糟糕的数据库设计。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多