【发布时间】:2020-04-01 08:35:20
【问题描述】:
我正在尝试执行一个存储过程,将新客户插入到客户表中,然后在关联表中创建与现有客户的新关联。
这必须作为一个程序完成。
我违反了 Associations 表上的唯一约束,该约束跨越 Customer1Id、Customer2Id 和 AssociationType(这也是一个引用类型引用表的 id)。两个客户可以多次关联,但不能通过相同的关联类型。下面是一个表格来证明这一点:
存储过程如下:
CREATE PROCEDURE usp_CreateNewCustomer_Association
@CustomerType INT,
@FirstName VARCHAR(30),
@LastName VARCHAR(30),
@CompanyName VARCHAR(40) = NULL,
@AddressLine1 VARCHAR(30),
@AddressLine2 VARCHAR(20) = NULL,
@City VARCHAR(20),
@Country VARCHAR(30),
@DOB DATE = NULL,
@Customer2Id INT,
@AssociationType INT
AS
BEGIN
INSERT INTO Customers
(CustomerType, FirstName, LastName, CompanyName, AddressLine1, AddressLine2, City, Country, DOB)
VALUES (@CustomerType, @FirstName, @LastName, @CompanyName, @AddressLine1, @AddressLine2, @City, @Country, @DOB)
UPDATE Associations
SET Customer1Id = @@IDENTITY,
Customer2Id = @Customer2Id,
AssociationType = @AssociationType
END
并且执行查询是(使用 cmets):
EXEC usp_CreateNewCustomer_Association
@CustomerType = 1, -- Personal Customer code = '1'
@FirstName = 'Henry',
@LastName = 'Godfrey',
@AddressLine1 = 'Tripton Heights',
@AddressLine2 = 'Broadspoke',
@City = 'Sydney',
@Country = 'Australia',
@Customer2Id = 3, -- There is an existing customer with the ID '3'
@AssociationType = 43 -- Association type 43 means 'Developer' as in Customer (num) is the developer for customer 3
我得到这个错误:
消息 2627,级别 14,状态 1,过程 usp_CreateNewCustomer_Association,第 22 行
违反 UNIQUE KEY 约束“UC_Associations”。无法在对象“dbo.Associations”中插入重复键。重复键值为 (14, 3, 43)。
我对使用唯一约束不是很熟悉(这可能很明显),但我不能放弃唯一约束,所以如果有人能建议我如何纠正这个问题,我将不胜感激。
【问题讨论】:
-
如果答案解决了您的问题,您应该将其标记为正确。这样可以确保每个人都知道这个问题已经解决了。
标签: sql sql-server unique-constraint