繁体   English   中英

如果SQL Server 2008中存在子级,则阻止删除或更新父级

[英]Prevent deleting or updating the parent if child exists in SQL Server 2008

我有两张桌子:

declare @parent table
(
    [SEARCHID] [int] NOT NULL,
    [COMPID] [int] NOT NULL,
    [COMPPNO] [varchar](35) NOT NULL,
    [PACKSIZE] [varchar](100) NOT NULL
)

DECLARE @CHILD TABLE
(
    [SEARCHID] [int] NOT NULL,
    [COMP_ID] [int] NULL,
    [PROD_LINK] [varchar](500) NULL,
    [SRPNO] [varchar](24) NULL
)

愿有人可以帮帮我吗? 如何确保searchid存在于子节点中,那么它不应该在父表中更改或删除?

你真的需要一个声明的表变量吗? 在这种情况下,您需要使用本地逻辑。

如果您在物理上定义表,无论是作为临时表还是作为其中一个数据库中的表,您都可以使用外键约束轻松解决此问题:

试试这样:

CREATE TABLE parent
(
    [SEARCHID] [int] NOT NULL,
    [COMPID] [int] NOT NULL,
    [COMPPNO] [varchar](35) NOT NULL,
    [PACKSIZE] [varchar](100) NOT NULL
);

CREATE TABLE CHILD
(
    [SEARCHID] [int] NOT NULL CONSTRAINT FK_Child_SearchId FOREIGN KEY REFERENCES parent(SEARCHID),
    [COMP_ID] [int] NULL,
    [PROD_LINK] [varchar](500) NULL,
    [SRPNO] [varchar](24) NULL
)

编辑:没看到不应该改变

如果你的父行根本不应该改变如果至少有一个孩子,你就会读到INSTEAD OF TRIGGER来强制执行你想要的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM