當前位置:首頁 » 編程語言 » sql約束重復

sql約束重復

發布時間: 2022-07-02 21:14:19

㈠ 創建一個sql約束使某列值不得重復,但如果是NULL時忽略

用unique時null也只能出現一次,只可能用自定議函數約束或觸發器限制

樓主是非用約束還是用觸發器也行.

trigger:
create trigger tr_T_CheckColumn on T
after insert,update
as
if exists(select 1 from inserted where Column1 is not null) and (select top 1 count(*) from inserted i inner join T on i.ID=t.ID--ID為唯一性列
group by i.ID order by desc)>1
begin
rollback tran
raiserror 50001'有重復值'
end

㈡ SQL insert into 出現重復約束,不讓插入,如何去掉

SELECT
tab.name AS [表名],
chk.name AS [Check約束名],
col.name AS [列名],
chk.definition
FROM
sys.check_constraints chk
JOIN sys.tables tab
ON (chk.parent_object_id = tab.object_id)
JOIN sys.columns col
ON (chk.parent_object_id = col.object_id
AND chk.parent_column_id = col.column_id)

你可以通過上面這個語句,看看 那個表裡面, 有沒有其他額外的 Check。

或者通過下面的這個語句,查詢 那個表上面, 有沒有什麼觸發器 限制了你的操作。

select
tri.name AS TriggerName,
tri.is_disabled AS IsDisable,
tri.is_instead_of_trigger AS IsInsteadOfTrigger,
c.text AS CreateTriggerSQL
from
sys.triggers tri LEFT OUTER JOIN
dbo.syscomments c ON tri.object_id = c.id

㈢ sql約束 大概意思就是正數不可以重復,負數可以重復

樓主 你這個需求 最好是用觸發器來完成
約束沒法這樣判斷的
如果有什麼疑問可以隨時來找我

㈣ sql怎麼約束一個欄位的信息不能與另一個欄位的信息重復

我認為最好少用約束,你想當違反約束的事件發生之後,資料庫會彈出一個只有程序員才能看懂的出錯對話框.用戶根本不知道發生了什麼事.一個段與另外一個欄位不能重復,這樣的問題,在數據編輯時就可以解決掉.比如
if A信息=B信息 then
begin
showessage(' 某信息與某信息不能重復,請重新輸入!');
exit;
end;
showessage(' 某信息與某信息不能重復,請重新輸入!');是不是比資料庫給出的出錯的對話框好懂多了呢?

㈤ sql2008如何用check約束學號不能重復

學號一般你可以設置為自增長的 那就不會出現重復了啊 自增長代碼為 identity(起始值,一次增加多少)

㈥ SQLServer2000約束表達式 約束一個欄位的值,如果有相同的值錄入就覆蓋

這不是約束,應該是觸發器吧,一條記錄插入的時候先判斷表中是不是已經有了與這個欄位值相等記錄,如果有的話就刪除這條記錄,然後再插入,如果沒有直接插入即可。你說的是這個意思吧?

㈦ SQL語句,約束不重疊。

用觸發器來做檢查:
CREATE TRIGGER tr_iu_reservation ON reservations
FOR INSERT, UPDATE AS
BEGIN
IF EXISTS (
SELECT
1
FROM
-- 資料庫的表 與 本次插入/更新的數據作關聯.
-- 但是排除掉 本次自己更新的這些數據.
reservations r
JOIN inserted i ON (r.reserver != i.reserver)
WHERE
( -- 檢查 開始.
r.start_seat <= i.start_seat
and r.finish_seat >= i.start_seat )
OR
( -- 檢查 結束.
r.start_seat <= i.finish_seat
and r.finish_seat >= i.finish_seat )
)
-- 如果存在重復的數據,那麼回滾掉.
ROLLBACK;
END
go

使用約束來處理
創建函數.
CREATE FUNCTION reserExistsCheck(
@reserver char(10),
@start_seat INT,
@finish_seat INT
)
RETURNS INT
AS
BEGIN
-- 檢查的結果.
DECLARE @CheckResult INT;
-- 開始檢查:
IF EXISTS (
SELECT
1
FROM
reservations r
WHERE
r.reserver != @reserver
AND
(
( -- 檢查 開始.
r.start_seat <= @start_seat
and r.finish_seat >= @start_seat )
OR
( -- 檢查 結束.
r.start_seat <= @finish_seat
and r.finish_seat >= @finish_seat )
)
)
BEGIN
-- 存在有重復的數據.
SET @CheckResult = 1;
END
ELSE
BEGIN
-- 不存在有重復的數據.
SET @CheckResult = 0;
END
-- 處理完畢. 返回.
RETURN @CheckResult;
END;
GO

-- 為表新增加約束.
ALTER TABLE reservations
ADD CONSTRAINT reservations_check
CHECK (dbo.reserExistsCheck(reserver, start_seat, finish_seat) = 0);
GO

㈧ SQL server語句所有的約束條件

1、主鍵約束(Primary Key constraint):要求主鍵列數據唯一,並且不允許為空。

2、唯一約束(Unique constraint):要求該列唯一,允許為空,但只能出現一個空值。

3、檢查約束(Check constraint):某列取值范圍限制,格式限制等,如有關年齡、郵箱(必須有@)的約束。

4、默認約束(Default constraint):某列的默認值,如在資料庫里有一項數據很多重復,可以設為默認值。

5、外鍵約束(Foreign Key constraint):用於在兩個表之間建立關系,需要指定引用主表的哪一列。

(8)sql約束重復擴展閱讀:

對於存在外鍵約束的表,如果進行刪除非空的外鍵,可能會出現錯誤。 如果在 FOREIGN KEY 約束的列中輸入非 NULL 值,則此值必須在被引用的列中存在,否則將返回違反外鍵約束的錯誤信息。

列級 FOREIGN KEY 約束的 REFERENCES 子句僅能列出一個引用列,且該列必須與定義約束的列具有相同的數據類型。表級 FOREIGN KEY 約束的 REFERENCES 子句中引用列的數目必須與約束列列表中的列數相同。每個引用列的數據類型也必須與列表中相應列的數據類型相同。

㈨ SQL約束使某列值不得重復,但如果是NULL時忽略

如果是唯一約束的話,只能有1行可以為NULL,否則就不是唯一了

熱點內容
怎麼查看我的wifi密碼 發布:2024-04-25 18:54:43 瀏覽:756
fckeditorforjava 發布:2024-04-25 18:50:27 瀏覽:623
優酷上傳視頻需要多久 發布:2024-04-25 18:33:05 瀏覽:675
inf12編譯器 發布:2024-04-25 18:15:39 瀏覽:99
撲克總督3安卓哪裡下載 發布:2024-04-25 18:10:02 瀏覽:395
什麼網站是php 發布:2024-04-25 18:03:42 瀏覽:221
java教程免費下載 發布:2024-04-25 18:02:01 瀏覽:443
i西安編程 發布:2024-04-25 16:55:35 瀏覽:263
核磁看壓縮 發布:2024-04-25 16:37:22 瀏覽:432
訪問不上光貓 發布:2024-04-25 16:13:44 瀏覽:319