Как определить ссылочную целостность в этом сценарии для 2 таблиц SQL Server? - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть две таблицы в SQL Server 2005 следующим образом

Таблица A

  • ActionID (PK, int, not null)
  • ProgressID (uniqueidentifier, notnull)
  • ReferID (уникальный идентификатор, не ноль)
  • Поле XYZ (varchar (50), не нуль)
  • Поле MNO (tinyint, не нуль)

Таблица B

  • TrackID (PK, int, not null)
  • ProgressID (уникальный идентификатор, не ноль)
  • ReferID (уникальный идентификатор, не ноль))
  • Поле ABC (varchar (20), не ноль)
  • Поле EFG (дата-время, не ноль)

Теперь у меня есть конкретный вопрос:

ProgressID в обеих таблицах относится к одному и тому же объекту.И я хочу установить интегральные отношения, чтобы исключить ProgressID в Таблице A, когда значение присутствует в Таблице B. Как это сделать?

1 Ответ

1 голос
/ 01 февраля 2011

Я бы порекомендовал для этого триггер перед удалением.Что-то вроде

create trigger tr_tableA_progressId
on TableA for Delete
as 
    if exists
        (select 'true'
        from dbo.TableB
        where TableB.progressID = (select progressID
                                  from deleted d))

        BEGIN
            RAISERROR 'Cannot delete progressId exists in TableB'
            ROLLBACK TRAN
        End

Я не знаю ограничений, которые приведут в исполнение то, что вы хотели бы.

...