我有一个数据库中,我有两个表:MSSQL - 外键同一列,如果其他列不等于指行
CREATE TABLE Transactions (
ID BIGINT IDENTITY(1,1) NOT NULL,
AccountID BIGINT NOT NULL,
Amount BIGINT NOT NULL,
CONSTRAINT PK_Transactions PRIMARY KEY CLUSTERED (ID ASC,AccountID ASC),
CONSTRAINT FK_Transaction_Account FOREIGN KEY (AccountID) REFERENCES Accounts(ID)
);
CREATE TABLE Accounts (
ID BIGINT IDENTITY(1,11) NOT NULL,
Balance BIGINT NOT NULL,
CONSTRAINT PK_Accounts PRIMARY KEY (ID)
);
事务由一个存储过程,我插入自己的表写的,从而使行被生成时帐户1次将25“硬币”账户21:
ID | AccountID | Amount
-------------------------
1 | 1 | -25
-------------------------
1 | 21 | 25
在上述架构,我想基于ID和帐户ID的第一行以引用的底部行正在不等于到底行的AccountID。
而且反之亦然。
我想做的事情会是这个样子什么:
CONSTRAINT FK_Transaction_Counterpart FOREIGN KEY (ID) REFERENCES Transactions(ID) WHERE thisRow.AccountID != referencedRow.AccountID
我还没有发现在表约束的文档中这种可能性。
因此出于好奇和意图使用这个我问,这可能吗?如果是,如何?
编辑:
答案反映,这是不可能的,我应该调整我的设计或意图。
我想我会解决在功能代码中将两个事务行分配给对方。