【问题标题】:Two Tables with cascade delete具有级联删除的两个表
【发布时间】:2018-06-30 01:42:20
【问题描述】:

我有两张桌子:

[tbl_Records_DR] PK DAutoID.
[tbl_Records_DR_Explain] PK DRefer_ID
  1. 我想在这些表之间创建一个外键。
  2. 我希望在从 [tbl_Records_DR] 中删除记录时能够级联删除。

我正在以编程方式(仅)创建我的表格。

这是我目前拥有的在创建表格时效果很好的东西:

CREATE TABLE [tbl_Records_DR] ( " _
& "[DAutoID] int IDENTITY (1,1) PRIMARY KEY NOT NULL " _
& ", [Hub_Unique_Name] nvarchar(30) DEFAULT ''  NULL " _
& ", [DStatus] nvarchar(30) DEFAULT ''  NULL " _
& ", [DDate] datetime NULL " _
& ", [DTime_Start] datetime NULL " _
& ", [ReportCreatedFrom] nvarchar(5) DEFAULT 'DR'  NULL);")

CREATE TABLE [tbl_Records_DR_Explain] ( " _
& "[AutoID] int IDENTITY (1,1) NOT NULL " _
& ", [DRefer_ID] int PRIMARY KEY  NOT NULL " _
& ", [DExplain] nvarchar(700) DEFAULT ''  NULL " _
& ", [ImportCompleted] bit DEFAULT 0 NULL;")

谢谢, 黎明

【问题讨论】:

  • 您是否已经在tbl_Records_DR_Explain 中定义了指向tbl_Records_DR 的字段? Microsoft Docs 有关于创建外键的详细信息:docs.microsoft.com/en-us/sql/relational-databases/tables/…
  • 为什么要在这样的程序中创建表格?编写不能多次运行的代码似乎需要付出很多努力。

标签: sql sql-server


【解决方案1】:

使用ALTER TABLE 更改此表之一并添加FOREIGN KEY。希望能帮到你

【讨论】:

    【解决方案2】:

    我想这就是你想要的:

    ALTER TABLE [tbl_Records_DR_Explain]
    ADD CONSTRAINT fk_AutoID
        FOREIGN KEY ([DRefer_ID])
        REFERENCES [tbl_Records_DR] ([DAutoID])
        ON DELETE CASCADE;
    

    编辑

    CREATE TABLE [tbl_Records_DR_Explain] (
    [AutoID] int IDENTITY (1,1) PRIMARY KEY NOT NULL 
    , [DRefer_ID] int  NOT NULL 
    , [DExplain] nvarchar(700) DEFAULT ''  NULL 
    , [ImportCompleted] bit DEFAULT 0 NULL
        CONSTRAINT fk_AutoID
        FOREIGN KEY (DRefer_ID)
        REFERENCES [tbl_Records_DR] ([DAutoID])
        ON DELETE CASCADE
        )
    

    http://rextester.com/NZH15043

    【讨论】:

    • 创建后是否要更改表?或者有没有办法在创建表时按照您的建议进行操作?
    • 添加了编辑以将 FK 包含在原始表的创建中,而不是在之后更改表
    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2023-03-12
    • 2016-07-04
    相关资源
    最近更新 更多