在 SQL SERVER 2005 中设置标识列的最大值

问题描述 投票:0回答:2

我正在开发一个Windows应用程序(使用Visual Studio 2008,Sql server 2005)。我必须维护用户日志信息。我有一个身份栏。它运行良好。但现在标识列的值是 172。当我尝试登录时,我再次收到错误:

违反主键 pk_userLogId 无法在对象“dbo.UserLog”中插入重复值。 该声明已终止。

当我关闭错误对话框时,我仍然可以使用该应用程序,但不会维护用户日志。

我应该怎样做才能避免收到此错误消息?

有什么方法可以设置标识列的最大值吗?

请帮帮我! 预先感谢!

sql-server-2005
2个回答
0
投票

我最初的回答是错误的,因为它是基于对日志表模式的误解。鉴于 Sheetal 后来发布了这个模式(并且我意识到列的名称是 UserLogId,而不是 UserLoginID...),这个假设是无效的。

因此日志表是,

CREATE TABLE USERLOG 
( UserLogId int identity (1,1) CONSTRAINT pk_UserLogId primary key, 
  UserName nvarchar(50) not null, 
  LogInTime datetime CONSTRAINT dft_LogInTime default getdate() 
) 
--ADDING LOGOUT TIME ALTER TABLE USERLOG ADD LogOutTime datetime

让OP的问题变得更加令人费解......

如何通过身份栏获得PK违规条件? (除非该表的 INDENTITY_INSERT 设置,以及包含 PK 列值的手动编辑/插入,也许 Sheetal 可以阐明这一点......?)

因此,Sheetal 应在用户经过身份验证后,在完成登录的代码区域中研究应用程序的逻辑,并查找为 UserLogId 列指定值的查询实例(WHERE 子句中的除外)当然)。

-- 以下是错误的(基于错误的假设)----

问题似乎是 UserLoginId 被声明为日志表的主键。对于这样的表来说,这是一个奇怪的选择,因为我们期望给定用户有许多日志记录。

在 SQL 表中,主键约束本质上指示 SQL 拒绝对表中已存在主键值的记录的任何 INSERT 请求。 (并返回类似于问题中提到的错误条件)

如果不知道日志表架构和用例,很难建议,但您可以完全删除 pk 约束或使用另一列。名为“EventId”的自动递增列可能是一个不错的选择。你会在日志表中得到类似的东西:

EventID (PK)   DateTime              UserLoginId  EventType     Details
1              01/02/2008 06:15:01   172          LogIn         Stan
2              01/02/2008 06:15:21   321          LogIn         Jeff
3              01/02/2008 06:15:24   172          FileDownload  Report7.pdf
4              01/02/2008 06:15:54   172          FileDownload  SalesTraining.pdf
5              01/02/2008 06:17:21   321          LogOut        

等等...


0
投票

您是否将标识列设置为自动增量。这听起来不像是数字范围问题。相反,您似乎在创建新的 UserLog 条目时显式提供了主键值。该错误消息使我相信表 UserLog 中已存在一条记录,其主键值与您尝试添加的主键值相同。

© www.soinside.com 2019 - 2024. All rights reserved.