与不是主键的身份列的关系

时间:2018-09-05 17:17:55

标签: sql sql-server database

我有一个.then表,其中.thenconsole.log)是Customers列(1,1)和IDINT )是主键。我还有一个包含IdentityCustomerID)的表,我想与NVARCHAR表的CustID列建立关系。

SQL Server Management Studio通知我,没有匹配的主键或唯一约束-因此,我在INT的ID列上添加了约束以使其唯一。相同的消息。

primary key or unique constraint error

编辑为表,约束和关系添加SQL脚本

Customers

2 个答案:

答案 0 :(得分:2)

您的错误无法再现。

我从您的问题中获取了代码,更改了CREATE TABLE语句的顺序,以便在Status之前创建StateCustomer表。我还取出了重复约束的创建:

--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命令中交换了CustomerSecond表名的位置。 (这比您想象的要普遍)

针对评论中的一个问题,我将唯一索引更改为唯一约束,然后重试它,仍然可以使用。

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

这里的另一种可能性是您的数据类型不匹配。您必须提供表定义供我们检查。