我使用,并希望添加一个约束检查来自Table1的列中的数据是否存在于来自Table2的另一列中(但两者并不是唯一的)。
Table1 | Table2
--------------------
ColX ColY
A | A //Ok
A | A //Ok
B | A //Ok
B | B //Ok
C | D //Impossbile by the constraint有可能做这样的事吗?
发布于 2014-07-09 09:09:10
不幸的是,Server不允许您为非唯一列创建FOREIGN KEY。
您可以创建一个触发器,该触发器将使用该列的唯一值填充辅助表,并为该表设置一个外键:
CREATE TABLE
Table1_Y
(
colY VARCHAR(20) NOT NULL PRIMARY KEY,
cnt BIGINT NOT NULL
)
GO
CREATE TRIGGER
TR_Table1_All
ON Table1
AFTER INSERT, UPDATE, DELETE
AS
MERGE
INTO Table1_Y t
USING (
SELECT colY, SUM(cnt)
FROM (
SELECT colY, 1
FROM INSERTED
UNION ALL
SELECT colY, -1
FROM DELETED
) q (colY, cnt)
) s (colY, сте)
ON t.colY = s.colY
WHEN MATCHED AND t.cnt - s.cnt <= 0 THEN
DELETE
WHEN MATCHED THEN
UPDATE
SET t.cnt = t.cnt + s.cnt
WHEN NOT MATCHED BY TARGET AND s.cnt > 0 THEN
INSERT (colY, cnt)
VALUES (s.colY, s.cnt);
GO然后为那个表做一个外键:
ALTER TABLE
Table2
ADD CONSTRAINT
FK_Table2_ColX__Table1_ColY
FOREIGN KEY
(colX)
REFERENCES
Table1 (colY)
GOhttps://stackoverflow.com/questions/24648874
复制相似问题