如何获取表的最高ID号并增加它?

时间:2017-11-27 13:12:03

标签: c# sql-server tsql

我希望获得表中最高的ID号并增加它,但它似乎返回0,我是怎么做的。

private int MaxAuthorValue()
{
    string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Library;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        string maxQuery = "SELECT MAX(AuthorId) FROM Author";
        SqlCommand command = new SqlCommand(maxQuery, connection);
        int x = (int)command.ExecuteScalar();
        return x + 1;
    }
}

我想要做的是返回已经发生的ID,以便用户可以添加一个作者而不必自己写入ID,因为这样做是非常不安全的(例如,如果作者有ID = 1,他们尝试添加另一位具有相同ID号的作者,这会产生错误。)

编辑:添加SQLServer表创建代码

CREATE TABLE [dbo].[Author] 
(
    [AuthorId] INT NOT NULL IDENTITY(1,1),
    [Name] NVARCHAR (50) NOT NULL,
    [Nationality] NVARCHAR (50) NOT NULL, 
    PRIMARY KEY CLUSTERED ([AuthorId] ASC)
);

1 个答案:

答案 0 :(得分:1)

如果表格不是很大,我建议您删除并使用

重新创建表格
CREATE TABLE dbo.<YOUR-TABLE-NAME>
(
  Id int NOT NULL
         IDENTITY(1, 1),
  --Other Column names and types
)
ON  [PRIMARY]
GO

如果没有,则添加新列并将其用作您的ID

ALTER <YOUR-TABLE-NAME>
ADD <NEW-ID-COLUMN-NAME> INT IDENTITY(1, 1)
GO

然后删除现有的ID列

编辑:您还尝试为标识列插入值。您不应为AuthorId插入任何值。也就是说,您应该只为AuthorId以外的其他列插入值。