[英]It is difficult to code in Microsoft SQL Server due to foreign keys and constraints
我有幾個關於 SQL 的問題。 我處理的一個問題是閱讀障礙,這導致我混淆了某些字符。 我可以在 Azure Data Studio 中讓事情變得更大嗎? 此外,我不確定為什么我的代碼收到錯誤。 以下是我收到的錯誤消息。 我一直在研究外鍵,但我無法解決這個問題。
這是代碼:
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Director')
DROP TABLE Director
CREATE TABLE Director
(
DirectorlD int IDENTITY(1,1) NOT NULL,
Director_FirstName varchar(20),
Director_LastName varchar(25),
CONSTRAINT Director_PK PRIMARY KEY (DirectorlD)
)
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Star')
DROP TABLE Star
CREATE TABLE Star
(
StarlD int IDENTITY(1,1) NOT NULL,
Star_FirstName varchar(20),
Star_LastName varchar(20),
CONSTRAINT Star_PK PRIMARY KEY (StarlD)
)
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Genre')
DROP TABLE Genre
CREATE TABLE Genre
(
GenrelD int IDENTITY(1,1) NOT NULL,
Genre varchar(28),
CONSTRAINT Genre_PK PRIMARY KEY (GenrelD)
)
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'Films')
DROP TABLE Films
CREATE TABLE Films
(
FilmslD int IDENTITY(1,1) NOT NULL,
Title varchar(49),
Rating NUMERIC(3,1),
DirectorID int,
StarlD int,
GenrelD int,
CONSTRAINT FilmslD_PK PRIMARY KEY (FilmslD)
)
ALTER TABLE Films
ADD CONSTRAINT fkl
FOREIGN key(DirectorID) REFERENCES Director(DirectorID);
ALTER TABLE Films
ADD CONSTRAINT fk2
FOREIGN key(StarlD) REFERENCES Star(StarlD);
ALTER TABLE Films
ADD CONSTRAINT fk3
FOREIGN key(GenrelD) REFERENCES Genre(GenrelD);
錯誤:
消息 2714,第 16 級,State 6,第 6 行
數據庫中已經有一個名為“Director”的 object。消息 3726,第 16 級,State 1,第 4 行
無法刪除 object 'Director',因為它被 FOREIGN KEY 約束引用。
無法刪除 object 'Director',因為它被 FOREIGN KEY 約束引用。
從上面的錯誤我們知道表'Director'被外鍵約束引用。 首先,我們需要刪除該外鍵,然后刪除表。
借助以下查詢,您可以獲得外鍵約束名稱和引用表名稱
SELECT name AS 'Foreign Key Constraint Name',
OBJECT_SCHEMA_NAME(parent_object_id) + '.' + OBJECT_NAME(parent_object_id) AS 'Child Table'
FROM sys.foreign_keys
WHERE OBJECT_SCHEMA_NAME(referenced_object_id) = 'schemaname' AND OBJECT_NAME(referenced_object_id) = 'tablename'
現在您可以alter
子表並刪除約束
ALTER TABLE childtable DROP CONSTRAINT fkconstraint;
刪除表的所有外鍵約束后,您現在可以通過
Drop table tablename
另請參閱marc_s的此SO Thread答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.