簡體   English   中英

由於外鍵和約束,很難在 Microsoft SQL 服務器中編碼

[英]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 約束引用。

我的代碼第 1 部分

我的代碼第 2 部分

無法刪除 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM