Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 对于2个允许null的字段,如何创建一个只需填充一个的约束?_Sql Server 2005 - Fatal编程技术网

Sql server 2005 对于2个允许null的字段,如何创建一个只需填充一个的约束?

Sql server 2005 对于2个允许null的字段,如何创建一个只需填充一个的约束?,sql-server-2005,Sql Server 2005,为了简化这一点,让我们以该表为例: table1 ------------- id unique primary int myVal1 int null (fk) myVal2 int null (fk) myData int not null 在该表上创建约束以便只能填充一个值的最佳方法是什么 这些措施将起作用: insert into table1 (myval1,myData) values (1,234) insert into table1 (myval2,myData)

为了简化这一点,让我们以该表为例:

 table1
 -------------
 id unique primary int
 myVal1 int null (fk)
 myVal2 int null (fk)
 myData int not null
在该表上创建约束以便只能填充一个值的最佳方法是什么

这些措施将起作用:

insert into table1 (myval1,myData) values (1,234)
insert into table1 (myval2,myData) values (1,123)
这些将不起作用:

insert into table1 (myData) values (234)
insert into table1 (myVal1,myval2,myData) values (1,2,123)

尝试使用检查约束:

CREATE TABLE dbo.Table1
    (
    rowID int NOT NULL primary key identity(1,1),
    myVal1 int NULL,
    myVal2 int NULL,
    myData int NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Table1 ADD CONSTRAINT
    CK_Table1_myVal1_or_myVal2 CHECK ((myVal2 IS NOT NULL AND myVal1 IS NULL) OR (myVal2 IS NULL AND myVal1 IS NOT NULL))
GO

尝试使用检查约束:

CREATE TABLE dbo.Table1
    (
    rowID int NOT NULL primary key identity(1,1),
    myVal1 int NULL,
    myVal2 int NULL,
    myData int NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Table1 ADD CONSTRAINT
    CK_Table1_myVal1_or_myVal2 CHECK ((myVal2 IS NOT NULL AND myVal1 IS NULL) OR (myVal2 IS NULL AND myVal1 IS NOT NULL))
GO

几小时后测试,现在不行,如果它像我想的那样工作,你会得到绿色支票。几小时后测试,现在不行,如果它像我想的那样工作,你会得到绿色支票