SQL一些语句冲突的问题,希望能被解决 谢谢。
CREATETABLES(学号Char(6)NOTNULLCONSTRAINTDF_Table_1_StudentnoDEFAULT('J0400'),姓名Char(8)...
CREATE TABLE S(
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC)
)ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
SELECT*FROM S
为什么结果是 消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束"CK_S"冲突。该冲突发生于数据库"student1416",表"dbo.S", column '学号'。
语句已终止 展开
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC)
)ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
SELECT*FROM S
为什么结果是 消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束"CK_S"冲突。该冲突发生于数据库"student1416",表"dbo.S", column '学号'。
语句已终止 展开
3个回答
展开全部
测试了你的代码,发现在CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]')的约束定义中[A-Z]和[0-9]等之间都有空格,造成J0401数据违反了这个约束。请你检查一下。
把你的代码修改后如下:
CREATE TABLE S(
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z][0-9][0-9][0-9][0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC))
ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
把你的代码修改后如下:
CREATE TABLE S(
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z][0-9][0-9][0-9][0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC))
ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
展开全部
CONSTRAINT CK_S CHECK (学号 LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]'),
你这句里面中的“LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]'”有空格,把'[A-Z] [0-9] [0-9] [0-9] [0-9]'中的空格去掉
下面正确:
CREATE TABLE S(
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE '[A-Z][0-9][0-9][0-9][0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC)
)ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
SELECT*FROM S
你这句里面中的“LIKE'[A-Z] [0-9] [0-9] [0-9] [0-9]'”有空格,把'[A-Z] [0-9] [0-9] [0-9] [0-9]'中的空格去掉
下面正确:
CREATE TABLE S(
学号 Char(6) NOT NULL CONSTRAINT DF_Table_1_Studentno DEFAULT ('J0400') ,
姓名 Char(8) NOT NULL,
性别 Char(2) NOT NULL ,
出生日期 Datetime NOT NULL CONSTRAINT DF_S_出生日期 DEFAULT ('1980-01-01'),
系 Varchar(20) NOT NULL,
电话 Char(8) NULL ,
CONSTRAINT CK_S CHECK (学号 LIKE '[A-Z][0-9][0-9][0-9][0-9]'),
CONSTRAINT CK_Sex CHECK (性别='女' OR 性别='男'),
CONSTRAINT CK_TEL CHECK (电话 LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
CONSTRAINT PK_S PRIMARY KEY CLUSTERED(学号 ASC)
)ON [PRIMARY]
GO
INSERT INTO S( 学号,姓名,性别,出生日期,系,电话)
VALUES ('J0401','李丽','女','1980-02-12','管理信息系','931-1234')
GO
SELECT*FROM S
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
'[A-Z] [0-9] [0-9] [0-9] [0-9]')和'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'是正则表达式。正则表达式要用Regexp前缀的函数,这里不能使用like,而要用regexp_like。上面的句子写成如下形式:
CONSTRAINT CK_S CHECK (regexp_like(学号,'[A-Z] [0-9] {4}'))
CONSTRAINT CK_TEL CHECK (regexp_like(电话,'[0-9]{7}'))
另外,创建各种对象时,名称最好不要使用中文。有些个别地方汉化不彻底会出错的。
CONSTRAINT CK_S CHECK (regexp_like(学号,'[A-Z] [0-9] {4}'))
CONSTRAINT CK_TEL CHECK (regexp_like(电话,'[0-9]{7}'))
另外,创建各种对象时,名称最好不要使用中文。有些个别地方汉化不彻底会出错的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询