我根據客戶要求創建了幾個,我有一個聲明,我想知道它是否會失敗,或者如果我需要添加一些代碼行,所以它不會失敗。表創建聲明
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'是一個錯字。 –
您可以嘗試將它們創建爲臨時表(在名稱前加一個#),這樣您將看到任何錯誤而無需實際製作表。請記住,您需要在最後刪除表格,否則下次您將重新創建相同的表格。 –