重複の可能性:
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