Sql server T-SQL使用什么样的约束
以下两个表仅显示了相关的键列Sql server T-SQL使用什么样的约束,sql-server,tsql,constraints,Sql Server,Tsql,Constraints,以下两个表仅显示了相关的键列 CREATE TABLE [dbo].[Jobs]( [ID] [int] IDENTITY(1,1) NOT NULL, [JobNo] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
CREATE TABLE [dbo].[Jobs](
[ID] [int] IDENTITY(1,1) NOT NULL,
[JobNo] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED
(
[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]
CREATE TABLE [dbo].[Items](
[JobID] [int] NOT NULL,
[BarcodeNo] [nvarchar](50) NOT NULL,
[SerialNo] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Items_1] PRIMARY KEY CLUSTERED
(
[JobID] ASC,
[BarcodeNo] ASC,
[SerialNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我需要确保在输入项目时,JobID与Jobs表中的ID匹配。看起来,我不能使用FK,因为items表中的PK是由3列组成的复合键
短暂性脑缺血发作
标记
我可以对此使用什么样的约束 外键可以正常工作 让单列[dbo].[Items].[JobID]引用作业的主键没有问题
CREATE TABLE [dbo].[Jobs]
(
[ID] [INT] IDENTITY(1, 1) NOT NULL,
[JobNo] [NVARCHAR](50) NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED ( [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]
CREATE TABLE [dbo].[Items]
(
[JobID] [INT] NOT NULL REFERENCES [dbo].[Jobs]([ID]), /*<-- FK declaration*/
[BarcodeNo] [NVARCHAR](50) NOT NULL,
[SerialNo] [NVARCHAR](50) NOT NULL,
CONSTRAINT [PK_Items_1] PRIMARY KEY CLUSTERED ( [JobID] ASC, [BarcodeNo] ASC, [SerialNo] ASC )
WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]
外键工作正常 让单列[dbo].[Items].[JobID]引用作业的主键没有问题
CREATE TABLE [dbo].[Jobs]
(
[ID] [INT] IDENTITY(1, 1) NOT NULL,
[JobNo] [NVARCHAR](50) NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED ( [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]
CREATE TABLE [dbo].[Items]
(
[JobID] [INT] NOT NULL REFERENCES [dbo].[Jobs]([ID]), /*<-- FK declaration*/
[BarcodeNo] [NVARCHAR](50) NOT NULL,
[SerialNo] [NVARCHAR](50) NOT NULL,
CONSTRAINT [PK_Items_1] PRIMARY KEY CLUSTERED ( [JobID] ASC, [BarcodeNo] ASC, [SerialNo] ASC )
WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]
您可以使用外键引用多个列;如果子表中没有全部3列,则可以使用外键引用多个列;I don’我没有孩子表中的所有3列,我一定是遗漏了什么。我得到一个错误,说在JobID、BarcodeNo和SerialNo的作业中没有主键。从我所做的搜索来看,大多数人都同意这是不可能的。我唯一能做的就是在Items上创建一个代理PK,将JobID、BarcodeNo和SerialNo作为唯一索引,然后在Items.JobID和Jobs.ID之间创建Fk。我错过什么了吗?@mark1234是的,你一定错过了。我回答中的代码表明它工作正常。如果试图在创建表后添加FK,请使用ALTER table dbo.Items,并选中add FOREIGN KEYJobID REFERENCES dbo.Jobs IDDon;我不知道我做错了什么。工作完美。谢谢bunch@mark1234-从错误消息中,您得到的信息听起来像您或可能是视觉工具?正在执行ALTER TABLE dbo。带有检查ADD FOREIGN KEYJobID、BarcodeNo、SerialNo的项引用dbo。Jobs@Martin史密斯-是的,就是这样。正在使用SSMS的可视化工具。我一定错过了什么。我得到一个错误,说在JobID、BarcodeNo和SerialNo的作业中没有主键。从我所做的搜索来看,大多数人都同意这是不可能的。我唯一能做的就是在Items上创建一个代理PK,将JobID、BarcodeNo和SerialNo作为唯一索引,然后在Items.JobID和Jobs.ID之间创建Fk。我错过什么了吗?@mark1234是的,你一定错过了。我回答中的代码表明它工作正常。如果试图在创建表后添加FK,请使用ALTER table dbo.Items,并选中add FOREIGN KEYJobID REFERENCES dbo.Jobs IDDon;我不知道我做错了什么。工作完美。谢谢bunch@mark1234-从错误消息中,您得到的信息听起来像您或可能是视觉工具?正在执行ALTER TABLE dbo。带有检查ADD FOREIGN KEYJobID、BarcodeNo、SerialNo的项引用dbo。Jobs@Martin史密斯-是的,就是这样。正在使用SSMS的可视化工具。