我根据客户要求创建了几个,我有一个声明,我想知道它是否会失败,或者如果我需要添加一些代码行,所以它不会失败。表创建声明
CREATE TABLE AuditReport
(
AR_ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
TPPRM_ID NVARCHAR(8) NOT NULL FOREIGN KEY REFERENCES Vendor(TPPRM_ID) ON DELETE CASCADE ON UPDATE CASCADE,
OR_ID INT NOT NULL FOREIGN KEY REFERENCES OversightResults(OR_ID) ON DELETE CASCADE ON UPDATE CASCADE,
AR_ReportNAme NVARCHAR(20) NOT NULL,
AR_Version NVARCHAR(7),
AR_Type NVARCHAR(20),
AR_DateCoveragePeriod DATETIME2,
AR_DateReceived DATETIME2,
AR_Opinion NVARCHAR(11) CONSTRAINT CHK_Opinion CHECK (AR_Opinion IN ('Qualified','Unqualified')),
AR_NextReportDate DATETIME2,
AR_KeyContactName NVARCHAR(30),
AR_ContactEmail NVARCHAR(40),
AR_ContactPhoneNumber NVARCHAR(14)
)
--Create OversightResults Table
CREATE TABLE OversightResults
(
OR_ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
AR_ID INT NOT NULL FOREIGN KEY REFERENCES AuditReport(AR_ID) ON DELETE CASCADE ON UPDATE CASCADE,
TPPRM_ID NVARCHAR(8) NOT NULL FOREIGN KEY REFERENCES Vendor(TPPRM_ID) ON DELETE CASCADE ON UPDATE CASCADE,
OR_ServiceObjectives BIT,
OR_Objectives BIT,
OR_ControlsTested BIT,
OR_ManagementUserEntity NVARCHAR(10) CONSTRAINT CHK_ManagementUserEntity CHECK (OR_ManagementUserEntity IN ('Management','User')),
OR_Controls NVARCHAR(MAX),
OR_ServicerResponse NVARCHAR(MAX),
OR_ArvestMitigatingControls NVARCHAR(MAX),
OR_Deficiency NVARCHAR(10),
OR_Recommdations NVARCHAR(MAX),
OR_Observations NVARCHAR(MAX),
OR_Sufficiency BIT,
OR_RiskIdentified NVARCHAR(MAX)
)
正如你可以看到表设计审核报告表已经OR_ID作为外键和监督结果表有它作为一个主键和监督结果具有AR_ID作为一个外键和审计报告有它作为主键。由于声明现在正确,审计报告表将无法创建,因为OR_ID作为主键的表尚未创建?
请提供查询执行结果 – piyushj
试一试会回答这个问题,但嘿。是。这是一个循环依赖。您可能必须在创建后添加其中一个约束来解决此问题。尽管我质疑这是否有意义。一个'OversightResult'只有一个'AuditReport'吗?如果是的话,为什么不把它们放在同一张桌子上呢?如果否,那么预想的链接是不可能的。另外我猜'OR_Recommdations'是一个错字。 –
您可以尝试将它们创建为临时表(在名称前加一个#),这样您将看到任何错误而无需实际制作表。请记住,您需要在最后删除表格,否则下次您将重新创建相同的表格。 –