2016-10-26 8 views
0

Я использую SQL Server 2016 и пытаюсь реализовать каскад при удалении. Он работает, но не, если я помещаю код в один скрипт. Код для удаления ограничений на --subproject человека и --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 

Этот длинный скрипт работает нормально, без ошибок, но никаких изменений не происходит для этих двух таблиц, если я не запускаю их в отдельных файлах. Что здесь не так?

+1

Вам не нужны пол-двоеточия после всех ваших заявлений 'alter'? – Beth

+0

Нет, это ничего не меняет, я должен разделить это вверх на 3 сценариев для того, чтобы работать –

+0

попробовать добавить оператор печати и посмотреть, что один не получает выполняется, например: печать 1 ALTER TABLE SubProjectPersonRole DROP CONSTRAINT SubProjectPersonRole_SubProjectPerson 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; 
Смежные вопросы