Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 SQL Server:ALTER TABLE语句与CHECK约束冲突_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server:ALTER TABLE语句与CHECK约束冲突

Sql server SQL Server:ALTER TABLE语句与CHECK约束冲突,sql-server,tsql,Sql Server,Tsql,我不明白为什么这不起作用: BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO ALTER TABLE dbo.Accounts A

我不明白为什么这不起作用:

BEGIN TRANSACTION

SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

COMMIT

BEGIN TRANSACTION
GO

ALTER TABLE dbo.Accounts ADD CONSTRAINT
    CK_client_not_null CHECK (site <> 'LWOP' and client is not null)
GO

ALTER TABLE dbo.Accounts SET (LOCK_ESCALATION = TABLE)
GO

COMMIT
我只得到可以将客户端设置为null的行

我错过了什么

再一次:我想做一个约束,仅当站点为“LWOP”时才限制客户端列上的空值,那么如何做呢

谢谢,
德扬

我已经找到了解决方案:

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.Accounts ADD CONSTRAINT
    CK_client_not_null CHECK (site <> 'LWOP' and client is not null OR site = 'LWOP')
GO
ALTER TABLE dbo.Accounts SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
开始交易
在上设置带引号的\u标识符
启用ARITHABORT
将数字_ROUNDABORT设置为OFF
将CONCAT\u NULL\u设置为
将ANSI_空值设置为ON
将ANSI_填充设置为ON
将ANSI_警告设置为ON
犯罪
开始交易
去
ALTER TABLE dbo.Accounts添加约束
检查客户端是否为空检查(站点“LWOP”和客户端是否为空或站点=“LWOP”)
去
ALTER TABLE dbo.Accounts SET(锁升级=表)
去
犯罪

站点“LWOP”和客户端不是空的或站点=“LWOP”-这涵盖了检查工作的所有情况。

我已经找到了解决方案:

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.Accounts ADD CONSTRAINT
    CK_client_not_null CHECK (site <> 'LWOP' and client is not null OR site = 'LWOP')
GO
ALTER TABLE dbo.Accounts SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
开始交易
在上设置带引号的\u标识符
启用ARITHABORT
将数字_ROUNDABORT设置为OFF
将CONCAT\u NULL\u设置为
将ANSI_空值设置为ON
将ANSI_填充设置为ON
将ANSI_警告设置为ON
犯罪
开始交易
去
ALTER TABLE dbo.Accounts添加约束
检查客户端是否为空检查(站点“LWOP”和客户端是否为空或站点=“LWOP”)
去
ALTER TABLE dbo.Accounts SET(锁升级=表)
去
犯罪

站点“LWOP”和客户端不为空或站点=“LWOP”-这涵盖了检查工作的所有情况。

@JacobH,此答案来自OP.@ShannonSeverance除非在添加约束之前清除空数据,否则此操作不会成功执行。下面是演示Suraj,这是正确的,但是表格已经为检查常量准备好了。我不认为要在现有的场景中工作,所有情况都必须如此true@dedo好的,我明白了,我在一开始也错了,在测试后纠正了自己,并由Shannon_Severance提出建议。谢谢。@JacobH,这个答案来自OP.@ShannonSeverance除非在添加约束之前清除空数据,否则这将无法成功执行。下面是演示Suraj,这是正确的,但是表格已经为检查常量准备好了。我不认为要在现有的场景中工作,所有情况都必须如此true@dedo好的,我明白了,我在一开始也错了,在测试后纠正了自己,并由Shannon_Severance提出建议。非常感谢。