資料庫中有一個日銷量記錄表,使用邏輯洗掉,就是用一個狀態欄位State來判斷是否洗掉。而這個表中的日期欄位SalesDate是不能重復的,同一天的資料有可能被多次洗掉,沒有洗掉的資料要保證日期唯一,而洗掉了的資料則可能出現多個同一天的資料。這種情況,想做洗掉狀態的判斷來控制日期的唯一。即當State=1時,SalesDate必需唯一,State=0時,SalesDate可不唯一。請問用約束能解決這個問題么?如果不能,有沒有別的方案?
uj5u.com熱心網友回復:
只能用觸發器:-- =============================================
-- Author: yenange
-- Create date: 20191019
-- Description:
-- =============================================
CREATE TRIGGER trig_t_I_U
ON dbo.t
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(
SELECT 1 FROM t AS A INNER JOIN INSERTED AS B ON A.pkId!=B.pkId
AND A.[State]=1 AND B.[State]=1
AND A.SalesDate = B.SalesDate
)
BEGIN
ROLLBACK TRAN;
RAISERROR('[State]=1 的情況下不允許SalesDate重復',16,1);
END
END
GO
uj5u.com熱心網友回復:
謝謝,我試試轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/125999.html
標籤:疑難問題
上一篇:sqlserver 求員工打卡上班時間,只取第一筆打卡和最后一筆打卡
下一篇:資料遷移
