我有一个.then
表,其中.then
(console.log
)是Customers
列(1,1)和ID
(INT
)是主键。我还有一个包含Identity
(CustomerID
)的表,我想与NVARCHAR
表的CustID
列建立关系。
SQL Server Management Studio通知我,没有匹配的主键或唯一约束-因此,我在INT
的ID列上添加了约束以使其唯一。相同的消息。
编辑为表,约束和关系添加SQL脚本
Customers
答案 0 :(得分:2)
您的错误无法再现。
我从您的问题中获取了代码,更改了CREATE TABLE语句的顺序,以便在Status
之前创建State
和Customer
表。我还取出了重复约束的创建:
--this already exists
CONSTRAINT [ID_Unique] UNIQUE NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
--so don't create this
ALTER TABLE CUSTOMERS
Add Constraint ID_Unique UNIQUE (ID)
我能够运行您的代码而不会遇到您描述的错误。我遇到的唯一错误是将FK创建为SalesPerson
,因为您没有包括该表的DDL。
因此,正在执行的代码和向我们显示的代码会导致您的错误。
答案 1 :(得分:1)
这对我有用。
create table tmp.Customer(ID INT identity(1,1) , CustID varchar(8) primary key);
GO
create table tmp.Second(blah int, RefCustID INT);
GO
Create unique index UX1 on tmp.Customer(ID)
GO
ALTER TABLE tmp.Second
ADD CONSTRAINT whatever
FOREIGN KEY (RefCustID)
REFERENCES tmp.Customer(ID)
GO
我怀疑您已在创建外键的ALTER TABLE命令中交换了Customer
和Second
表名的位置。 (这比您想象的要普遍)
针对评论中的一个问题,我将唯一索引更改为唯一约束,然后重试它,仍然可以使用。
create table tmp.Customer(ID INT identity(1,1) , CustID varchar(8) primary key);
GO
create table tmp.Second(blah int, RefCustID INT);
GO
Alter table Tmp.Customer ADD Constraint UX1 Unique (ID)
GO
ALTER TABLE tmp.Second
ADD CONSTRAINT whatever
FOREIGN KEY (RefCustID)
REFERENCES tmp.Customer(ID)
GO
这里的另一种可能性是您的数据类型不匹配。您必须提供表定义供我们检查。