Sql-Server

如何設置約束sql 2 colume,數據在別處不可用,只能使用

  • April 21, 2021

如何設置約束 sql 2 列,數據在別處不可用,只能使用。例子沒問題

範例是錯誤

當 ID = 1 時,PI 僅為 PA001

當 ID = 1 時,我們無法向表中插入除 PA001 之外的任何數據 在此處輸入圖像描述

要求不清楚。需要更多範例/更好的規範..

但是,我假設在一個 ID 被“添加”到 PI 之後,它變成了“配對”並且不能與不同的 ID/PI 配對。

  1. 創建一個配對錶 (ID,PI),PK 在 Id 上,Unique 在 PI 上。然後在 (PI,ID) 或標識列上將 FK 從您的表中添加到此新表中
  2. 沒有簡單的約束可以滿足您的需要。可以使用的是帶有函式的 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

引用自:https://dba.stackexchange.com/questions/290089