2016-10-26 24 views
0

SQL Server 2016を使用しており、削除時にカスケードを実装しようとしています。それはうまくいきますが、コードを単一のスクリプトに入れても意味がありません。 --subproject personと--activityに制約をドロップするコードは、再び制約を別のファイルに追加する必要があります。削除時のSQL Serverカスケード

だから、これは一つのファイルに

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 

この長いスクリプトはエラーなく正常に実行されていますが、別のファイルで実行しない限り、これらの2つのテーブルの変更は取り除かれません。ここで何が間違っていますか?

+1

あなたのすべての 'alter'文の後にセミコロンは必要ありませんか? プリント1 ALTER TABLE SubProjectPersonRole DROP CONSTRAINT SubProjectPersonRole_SubProjectPerson: – Beth

+0

いやには、何も変更しない、私はそれがprint文を追加し、1実行取得されていない例を参照してください –

+0

試して動作するために3つのスクリプトにこれを分割する必要があります print 1 – James

答えて

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;