如何将函数置于外键约束中?

时间:2019-04-18 13:30:58

标签: sql-server foreign-keys

我有一个表定义:

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.BCONCAT(T.A, '_', T.B)等于W.C T.C匹配>

然后,如果删除T中的记录,则应删除所有基于外键的相关W

1 个答案:

答案 0 :(得分:0)

我不同意这是最好的主意(很远),但是您可以可以重新发明轮子,制作PARSENAME的确定性版本,然后创建一个{ {1}}栏:

PERSISTED