Я использую 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
Этот длинный скрипт работает нормально, без ошибок, но никаких изменений не происходит для этих двух таблиц, если я не запускаю их в отдельных файлах. Что здесь не так?
Вам не нужны пол-двоеточия после всех ваших заявлений 'alter'? – Beth
Нет, это ничего не меняет, я должен разделить это вверх на 3 сценариев для того, чтобы работать –
попробовать добавить оператор печати и посмотреть, что один не получает выполняется, например: печать 1 ALTER TABLE SubProjectPersonRole DROP CONSTRAINT SubProjectPersonRole_SubProjectPerson print 1 – James