【數據庫】ALTER TABLE 語句與 CHECK 約束""衝突。該衝突發生於數據庫"",表"", column ''

本篇講述的是在已經創建好表且有數據的情況下,增加CHECK約束的報錯問題

一、問題

當我給數據庫中已經創建好的Student表,增加約束條件。

--增加student表的約束條件,要求性別只允許取“男”或“女”。
ALTER TABLE Student
ADD CONSTRAINT C_Student CHECK (sex IN ('男','女'))

語法沒錯,但是運行出現報錯。如圖:在這裏插入圖片描述

消息 547,級別 16,狀態 0,第 41 行
ALTER TABLE 語句與 CHECK 約束"C_Student"衝突。該衝突發生於數據庫"ScoreDB",表"dbo.Student", column ‘sex’。

二、分析原因

正常情況下,我們創建好數據表,然後用該語法定義增加約束是沒問題的。
但是經本人研究發現,當數據表中有數據時,增加約束會出現該問題。
因爲該Student表中是有數據的,所以增加不了約束。

三、解決辦法

方法一

sql語句方式:
把相關數據表的數據刪除掉,再執行該語句。
如果刪除表數據還是有問題,建議重建數據庫,先建立好關係,再導入數據試試。

方法二

可視化嚮導方式:
把“在創建或重新啓動時檢查現有數據”改爲否。

  1. 找到Student表,右擊約束,點擊“新建約束”
    在這裏插入圖片描述
  2. 左上角自動有一個約束,然後點擊圖中位置的省略號圖標
    在這裏插入圖片描述
  3. 根據實際情況給它添加約束關係,直接在框中輸入或黏貼,定義完關係後點擊確定
    在這裏插入圖片描述
  4. 把“在創建或重新啓動時檢查現有數據”改爲否!!!
    注意:
    如果數據表中都沒有數據,可以默認爲是。但是數據表中都有數據才創建約束,就要把這裏改爲否,才能創建成功。
    在這裏插入圖片描述
  5. 最後關閉這個頁面,會出現是否保存數據,依次點是就行了。
    在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章