重複の可能性:
2 つの列の間の列の 1 つは NOT NULL である必要があります。スキーマでそれを強制する方法は?
5 つの null 可能なフィールドを持つテーブルがあり、すべてのレコードにはこれらのフィールドのいずれかの値が必要です。SQL の多くの NULL 可能フィールドの少なくとも 1 つに値を入力するようユーザーに強制できますか? ありがとう
重複の可能性:
2 つの列の間の列の 1 つは NOT NULL である必要があります。スキーマでそれを強制する方法は?
5 つの null 可能なフィールドを持つテーブルがあり、すべてのレコードにはこれらのフィールドのいずれかの値が必要です。SQL の多くの NULL 可能フィールドの少なくとも 1 つに値を入力するようユーザーに強制できますか? ありがとう
はい、制約を使用してできCHECK
ます。
CREATE TABLE test
(
id INT,
val1 VARCHAR(32),
val2 VARCHAR(32),
val3 VARCHAR(32),
val4 VARCHAR(32),
val5 VARCHAR(32),
CHECK (COALESCE(val1,val2,val3,val4,val5) IS NOT NULL)
);
...少なくとも val1-val5 の 1 つが NOT NULL である必要があります。
ADD CONSTRAINT chkAnyNotNULL CHECK (col1 IS NOT NULL OR Col2 IS NOT NULL OR ....);
はい。CHECK CONSTRAINT
;の使用
USE tempdb
GO
IF OBJECT_ID('tempdb.dbo.MyTable') IS NOT NULL DROP TABLE MyTable
CREATE TABLE MyTable
(
Col1 INT NULL,
Col2 INT NULL,
Col3 INT NULL,
Col4 INT NULL,
Col5 INT NULL,
CONSTRAINT OneNonNull CHECK (COALESCE(Col1, Col2, Col3, Col4, Col5) IS NOT NULL)
)
GO
INSERT INTO MyTable
SELECT 1,2,3,4,5
GO
INSERT INTO MyTable
SELECT 1,NULL, NULL, NULL, NULL
GO
INSERT INTO MyTable
SELECT NULL, NULL, NULL, NULL, NULL
GO
SELECT *
FROM MyTable