首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >约束:来自另一个表中列的数据

约束:来自另一个表中列的数据
EN

Stack Overflow用户
提问于 2014-07-09 08:33:53
回答 2查看 242关注 0票数 1

我使用,并希望添加一个约束检查来自Table1的列中的数据是否存在于来自Table2的另一列中(但两者并不是唯一的)。

代码语言:javascript
运行
复制
Table1   | Table2
--------------------
ColX        ColY 
  A      |   A        //Ok
  A      |   A        //Ok
  B      |   A        //Ok
  B      |   B        //Ok
  C      |   D        //Impossbile by the constraint

有可能做这样的事吗?

EN

Stack Overflow用户

回答已采纳

发布于 2014-07-09 09:09:10

不幸的是,Server不允许您为非唯一列创建FOREIGN KEY

您可以创建一个触发器,该触发器将使用该列的唯一值填充辅助表,并为该表设置一个外键:

代码语言:javascript
运行
复制
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

然后为那个表做一个外键:

代码语言:javascript
运行
复制
ALTER TABLE
        Table2
ADD CONSTRAINT
        FK_Table2_ColX__Table1_ColY
FOREIGN KEY
        (colX)
REFERENCES
        Table1 (colY)
GO
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24648874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档