跨表创建唯一索引?
Create unique index across tables?
假设我有以下
table a
serial_no varchar(8)
serialised bit
table b:
serial_no varchar(8) (foreign key)
return_date datetime null
我可以创建一个不允许重复记录的唯一索引 serial_no 和空值 return_date,仅当来自 table a 的序列化字段为真时。
类似于:
create unique index unq_loan_serial_id
on table b(serial_no) where return_date is null and table a.serialised = 1
关于如何执行此操作的任何想法?谢谢
您不能将此直接应用于 table - 但您可以创建索引视图。
类似于:
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)
假设我有以下
table a
serial_no varchar(8)
serialised bit
table b:
serial_no varchar(8) (foreign key)
return_date datetime null
我可以创建一个不允许重复记录的唯一索引 serial_no 和空值 return_date,仅当来自 table a 的序列化字段为真时。
类似于:
create unique index unq_loan_serial_id
on table b(serial_no) where return_date is null and table a.serialised = 1
关于如何执行此操作的任何想法?谢谢
您不能将此直接应用于 table - 但您可以创建索引视图。
类似于:
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)