我有一个表定义:
CREATE TABLE [dbo].[T] (
[A] NVARCHAR (128) NOT NULL,
[B] NVARCHAR (128) NOT NULL,
[C] BIT NOT NULL,
[D] INT NOT NULL,
[E] DATETIME NOT NULL,
CONSTRAINT [PK_dbo.T] PRIMARY KEY CLUSTERED (A,B,C)
);
部分是另一个:
CREATE TABLE [dbo].[W] (
[A] INT IDENTITY(1,1),
[B] NVARCHAR (128) NOT NULL,
[C] BIT NOT NULL,
[D] INT NOT NULL,
[E] TIME NULL,
[F] TIME NULL,
CONSTRAINT [PK_dbo.W] PRIMARY KEY CLUSTERED ([A] ASC),
CONSTRAINT [FK_dbo.W_T] FOREIGN KEY(PARSENAME(REPLACE([B], '_', '.'), 2), PARSENAME(REPLACE([B], '_', '.'), 1), [C]) REFERENCES T(A,B,C) ON DELETE CASCADE
);
这不起作用,因为它不允许我将函数置于外键约束中。
T.A_T.B
等于W.B
我要说的是,所有W
必须与T
等于W.B
而CONCAT(T.A, '_', T.B)
等于W.C
然后,如果删除T
中的记录,则应删除所有基于外键的相关W
。
答案 0 :(得分:0)
我不同意这是最好的主意(很远),但是您可以可以重新发明轮子,制作PARSENAME
的确定性版本,然后创建一个{ {1}}栏:
PERSISTED