我有一個數據庫中,我有兩個表: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
我還沒有發現在表約束的文檔中這種可能性。
因此出於好奇和意圖使用這個我問,這可能嗎?如果是,如何?
編輯:
答案反映,這是不可能的,我應該調整我的設計或意圖。
我想我會解決在功能代碼中將兩個事務行分配給對方。