删除时SQL Server级联

时间:2016-10-26 16:31:54

标签: sql sql-server

我正在使用SQL Server 2016并尝试在删除时实现级联。它确实有效,但如果我将代码放在一个脚本中则不行。删除约--subproject人和--activity然后再添加约束的代码必须在单独的文件中。

所以这是一个文件

 ALTER TABLE dbo.SubProjectPerson 
     DROP CONSTRAINT SubProjectPerson_SubProject

,这是另一个文件

 ALTER TABLE dbo.SubProjectPerson
     ADD CONSTRAINT SubProjectPerson_SubProject
         FOREIGN KEY (SubProjectID)
         REFERENCES dbo.SubProject(SubProjectID) 
         ON DELETE CASCADE;

这是唯一可行的方式

这是我的脚本

BEGIN TRY
BEGIN TRANSACTION
    --subproject person
    ALTER TABLE dbo.SubProjectPersonRole 
        DROP CONSTRAINT SubProjectPersonRole_SubProjectPerson

    ALTER TABLE dbo.SubProjectPersonRole
        ADD CONSTRAINT SubProjectPersonRole_SubProjectPerson
            FOREIGN KEY (SubProjectPersonID) 
            REFERENCES dbo.SubProjectPerson(SubProjectPersonID) 
            ON DELETE CASCADE;

    ALTER TABLE dbo.SubProjectPerson 
        DROP CONSTRAINT SubProjectPerson_SubProject

    ALTER TABLE dbo.SubProjectPerson
        ADD CONSTRAINT SubProjectPerson_SubProject
            FOREIGN KEY (SubProjectID)
            REFERENCES dbo.SubProject(SubProjectID) 
            ON DELETE CASCADE;

    --activity
    ALTER TABLE dbo.Activity 
        DROP CONSTRAINT Activity_SubProject

    ALTER TABLE dbo.Activity
        ADD CONSTRAINT Activity_SubProject
            FOREIGN KEY (SubProjectID) 
            REFERENCES dbo.SubProject(SubProjectID) 
            ON DELETE CASCADE;

    --subproject
    ALTER TABLE dbo.SubProjectDocument 
        DROP CONSTRAINT SubProjectDocument_SubProject

    ALTER TABLE dbo.SubProjectDocument
        ADD CONSTRAINT SubProjectDocument_SubProject
            FOREIGN KEY (SubProjectID) 
            REFERENCES dbo.SubProject(SubProjectID) 
            ON DELETE CASCADE;

    ALTER TABLE dbo.SubProjectNote 
        DROP CONSTRAINT SubProjectNote_SubProject

    ALTER TABLE dbo.SubProjectNote
        ADD CONSTRAINT SubProjectNote_SubProject
            FOREIGN KEY (SubProjectID) 
            REFERENCES dbo.SubProject(SubProjectID) 
            ON DELETE CASCADE;

    --communication thread
    ALTER TABLE dbo.CommunicationThread 
        DROP CONSTRAINT CommunicationThread_SubProjectID

    ALTER TABLE dbo.CommunicationThread
        ADD CONSTRAINT CommunicationThread_SubProjectID
            FOREIGN KEY (SubProjectID) 
            REFERENCES dbo.SubProject(SubProjectID) 
            ON DELETE CASCADE;

   COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

这个长脚本运行正常但没有错误,但是没有为这两个表选择更改,除非我在单独的文件中运行它们。这有什么不对?

1 个答案:

答案 0 :(得分:0)

试试这个。每个语句都使用GO

ALTER TABLE dbo.SubProjectDocument 
DROP CONSTRAINT SubProjectDocument_SubProject

GO
ALTER TABLE dbo.SubProjectDocument
ADD CONSTRAINT SubProjectDocument_SubProject
FOREIGN KEY (SubProjectID) 
REFERENCES dbo.SubProject(SubProjectID) 
ON DELETE CASCADE;
相关问题