Создать уникальный индекс по таблицам?

Предположим, у меня есть следующее

table a
serial_no varchar(8)  
serialised bit

table b:
serial_no varchar(8) (foreign key)
return_date datetime null

Могу ли я создать уникальный индекс, который не допускает повторяющихся записей по serial_no и нулевой return_date, ТОЛЬКО ЕСЛИ сериализованное поле из таблицы a имеет значение true.

Что-то вроде:

create unique index unq_loan_serial_id
    on table b(serial_no) where return_date is null and table a.serialised = 1

Любые идеи о том, как я могу это сделать? Спасибо

1 ответ

Решение

Вы не можете применить это непосредственно к таблице - но вы можете создать индексированное представление.

Что-то вроде:

CREATE VIEW dbo.b_serialised --Guessing everything in dbo schema
WITH SCHEMABINDING
AS
  SELECT
    b.Serial_No
  FROM
     dbo.a
       inner join
     dbo.b
       on
          a.Serial_No = b.Serial_No --Guessing this was the implied join
  WHERE
    b.return_date is null and
    a.serialised = 1

С последующим

create unique clustered index UQ_b_serialised on b_serialised (Serial_No)
Другие вопросы по тегам