我一直在嘗試學習一些基本的SQL,並且一直在用一個想象中的項目來學習繩索。爲什麼違反UNIQUE KEY約束會發生?
我的數據庫已經建成這樣的:
CREATE TABLE [dbo].[People]
(
[Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[SocialSecurityNumber] [nvarchar](13) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Email] [varchar](50) NOT NULL
)
CREATE TABLE [dbo].[Employees]
(
[Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[EmployeeCode] [varchar](50) NOT NULL,
[PersonId] [int] FOREIGN KEY REFERENCES People (Id) NOT NULL
)
CREATE TABLE [dbo].[Administrators]
(
[Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[AdministratorCode] [varchar](50) NOT NULL,
[EmployeeId] [int] FOREIGN KEY REFERENCES Employees (Id) NOT NULL,
)
我已經成功地執行以下查詢:
INSERT INTO Administrators
VALUES ('A001', (SELECT Employees.Id FROM Employees
INNER JOIN People
ON People.Email = @email))
但是,當我把這個過程:
CREATE PROCEDURE [dbo].[InsertNewAdministrator]
(
@email VARCHAR(50),
@administratorCode VARCHAR(50)
)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Administrators
VALUES (@administratorCode, (SELECT Employees.Id
FROM Employees
INNER JOIN People ON People.Email = @email))
END
使用此代碼:
(p變量是發送到方法的類「管理員」的實例。管理員繼承人)。
using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand(procedureName, conn))
{
if (procedureName == "InsertNewAdministrator")
{
var a = p as Administrator;
command.Parameters.Add(new SqlParameter("@administratorCode", a.AdministratorCode));
}
else if (procedureName == "InsertNewEmployee")
{
...
}
else
{
...
}
command.Parameters.Add(new SqlParameter("@email", p.Email));
command.CommandType = CommandType.StoredProcedure;
conn.Open();
command.ExecuteNonQuery();
}
我得到以下錯誤:
Violation of UNIQUE KEY constraint 'UQ__Employee__7AD04F1040881669'."
(這是employeeCode
,顯然)
而我只是不明白爲什麼。按照預期,SQL總是添加一個新的管理員,但異常會導致我的業務邏輯崩潰。
現在我的代碼只是燕子一個空的捕捉...但我仍然知道它的存在... ...潛伏
任何人有任何想法,爲什麼?
您是否向我們展示了DDL中的所有內容?似乎有一個唯一的關鍵指標被遺漏。 – 2015-02-08 15:16:05
這種爲我解決了它。讓我看起來更多。原來是一個邏輯錯誤。打擾我... – Ize 2015-02-08 15:35:35