gpt4 book ai didi

sql-server - SQL Server 2008插入失败报告

转载 作者:行者123 更新时间:2023-12-03 07:54:08 25 4
gpt4 key购买 nike

我对“用户名”和“昵称”字段都有唯一的约束。当我使用重复的昵称运行以下代码时,SQL Server 2008将报告Err 23000违反唯一键约束。但是,当我使用重复的用户名运行它时,不会引发任何错误(尽管出现消息“受影响的行:0”,并且对该表没有任何影响)。

我不明白为什么要这样或如何处理(我要在任何一个实例中抛出错误)。提前致谢。

INSERT INTO成员(用户名,昵称)
值(“bob”,“bob55”)

CREATE TABLE [Members].[Members] (
[GUID] uniqueidentifier NOT NULL DEFAULT (newsequentialid()) ,
[UserName] nvarchar(256) NOT NULL ,
[NickName] nvarchar(256) NOT NULL ,
)


-- ----------------------------
-- Indexes structure for table Members
-- ----------------------------
CREATE UNIQUE INDEX [Index:UserName] ON [Members].[Members]
([UserName] ASC)
WITH (IGNORE_DUP_KEY = ON)
GO

-- ----------------------------
-- Primary Key structure for table Members
-- ----------------------------
ALTER TABLE [Members].[Members] ADD PRIMARY KEY ([GUID])
GO

-- ----------------------------
-- Uniques structure for table Members
-- ----------------------------
ALTER TABLE [Members].[Members] ADD UNIQUE ([NickName] ASC)
GO
ALTER TABLE [Members].[Members] ADD UNIQUE ([UserName] ASC)
GO

最佳答案

有两种方法可以使字段在SQL Server中唯一:

  • 唯一约束
  • 唯一索引

  • 创建唯一索引时,可以在尝试插入重复值的情况下设置数据库行为:
  • WITH (IGNORE_DUP_KEY = ON)-不执行任何操作,只需忽略具有重复值
  • 的新记录
  • WITH (IGNORE_DUP_KEY = OFF)-引发异常

  • 创建唯一约束时,SQL Server以隐式方式创建唯一索引 WITH (IGNORE_DUP_KEY = OFF)
    在您的问题中,您创建3个唯一索引:一个显式显示在UserName列上,两个隐式显示在NickName和UserName字段上。当您尝试插入具有重复的UserName的记录时,插入将因唯一索引冲突而停止,并且SQL Server会忽略该记录。唯一约束没有工作。但是,当您尝试插入具有重复NickName的记录时,唯一约束会产生错误。

    如果要以相同的方式获取两个字段的错误,只需删除唯一索引: DROP INDEX [Index:UserName] ON [Members].[Members]

    关于sql-server - SQL Server 2008插入失败报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598084/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com