Sql-Server
如何設置約束sql 2 colume,數據在別處不可用,只能使用
如何設置約束 sql 2 列,數據在別處不可用,只能使用。例子沒問題
範例是錯誤
當 ID = 1 時,PI 僅為 PA001
要求不清楚。需要更多範例/更好的規範..
但是,我假設在一個 ID 被“添加”到 PI 之後,它變成了“配對”並且不能與不同的 ID/PI 配對。
- 創建一個配對錶 (ID,PI),PK 在 Id 上,Unique 在 PI 上。然後在 (PI,ID) 或標識列上將 FK 從您的表中添加到此新表中
- 沒有簡單的約束可以滿足您的需要。可以使用的是帶有函式的 CHECK 約束,該函式將通過計算具有相同一半的 ID/PI 對來進行檢查。然而,就性能而言,這並不是非常理想的
根據CHECK約束添加:
CREATE TABLE {tablename} ( {table definition}, CHECK (ID != 1 OR PI = 'PA001') )
CREATE TABLE test (NAME CHAR(1), REV INT, ID INT, PI CHAR(5), CHECK (ID != 1 OR PI = 'PA001')); GO
INSERT INTO test VALUES ('A', 0, 1, 'PA001'); GO
INSERT INTO test VALUES ('A', 1, 1, 'PA001'); GO
INSERT INTO test VALUES ('A', 2, 1, 'PA002'); GO
消息 547 級別 16 狀態 0 第 1 行 INSERT 語句與 CHECK 約束“CK__test__35BCFE0A”衝突。衝突發生在數據庫“fiddle_c4abb5f9c518435fb6f88f2215747a89”、表“dbo.test”中。 消息 3621 級別 0 狀態 0 第 1 行 該語句已終止。
db<>在這裡擺弄
該表和數據是範例 ID 在匹配數據時有任何數據所以 pi,而不是任何值 檢查 id 1 PI = PA001,id 2 PI = PA002,id 999 PI = PA011 – Pimchadarat Netvanich
相應地更改 CHECK 約束。
CHECK (PI = 'PA' + FORMAT(ID, '000'))
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=958a54cb5dcd060a54561bd09105eabf