0

重複の可能性:
2 つの列の間の列の 1 つは NOT NULL である必要があります。スキーマでそれを強制する方法は?

5 つの null 可能なフィールドを持つテーブルがあり、すべてのレコードにはこれらのフィールドのいずれかの値が必要です。SQL の多くの NULL 可能フィールドの少なくとも 1 つに値を入力するようユーザーに強制できますか? ありがとう

4

3 に答える 3

5

はい、制約を使用してでき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 である必要があります。

于 2013-01-13T08:29:32.293 に答える
4
ADD CONSTRAINT chkAnyNotNULL CHECK (col1 IS NOT NULL OR Col2 IS NOT NULL OR ....);
于 2013-01-13T08:29:49.660 に答える
1

はい。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
于 2013-01-13T08:36:32.140 に答える