在这种情况下如何为 2 个 SQL Server 表定义引用完整性?

发布于 2024-10-15 02:09:37 字数 666 浏览 2 评论 0原文

我在 SQL Server 2005 中有 2 个表,如下

表 A

  • ActionID (PK,int, not null)
  • ProgressID (uniqueidentifier,not null)
  • ReferID (uniqueidentifier, not null)
  • Field XYZ (varchar(50), not null)
  • Field MNO (tinyint) , not null)

Table B

  • TrackID (PK,int, not null)
  • ProgressID (uniqueidentifier,not null)
  • ReferID (uniqueidentifier, not null)
  • Field ABC (varchar(20), not null)
  • Field EFG (datetime, not null)

现在我有一个具体问题:

两个表中的 ProgressID 引用相同的实体。我想建立一个积分关系,以便当表 B 中存在值时,不可能删除表 A 中的 ProgressID。如何做到这一点?

I have 2 tables in SQL Server 2005 as follows

Table A

  • ActionID (PK,int, not null)
  • ProgressID (uniqueidentifier,not null)
  • ReferID (uniqueidentifier, not null)
  • Field XYZ (varchar(50), not null)
  • Field MNO (tinyint, not null)

Table B

  • TrackID (PK,int, not null)
  • ProgressID (uniqueidentifier,not null)
  • ReferID (uniqueidentifier, not null)
  • Field ABC (varchar(20), not null)
  • Field EFG (datetime, not null)

Now I have a specific question:

The ProgressID in both the tables refer to the same entity. And I want to establish an integral relationship so that Deletion of ProgressID in Table A is not possible when value exisits in Table B. How to do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乱世争霸 2024-10-22 02:09:38

我会为此推荐一个删除前触发器。就像

create trigger tr_tableA_progressId
on TableA for Delete
as 
    if exists
        (select 'true'
        from dbo.TableB
        where TableB.progressID = (select progressID
                                  from deleted d))

        BEGIN
            RAISERROR 'Cannot delete progressId exists in TableB'
            ROLLBACK TRAN
        End

我不知道有什么约束可以强制执行您想要的那样。

I would recommend a before delete trigger for this. Something like

create trigger tr_tableA_progressId
on TableA for Delete
as 
    if exists
        (select 'true'
        from dbo.TableB
        where TableB.progressID = (select progressID
                                  from deleted d))

        BEGIN
            RAISERROR 'Cannot delete progressId exists in TableB'
            ROLLBACK TRAN
        End

I do not know of a constraint that will enforce what you would like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文