谁帮看看这个简单的存储过程错的哪里

来源:百度知道 编辑:UC知道 时间:2024/06/29 01:05:27
表是这样的6个字段,学号int,姓名varchar,班级varchar,专业varchar,年龄int,性别varchar。其中性别有个check约束:性别 in('男', '女'),存储过程是:CREATE PROCEDURE insertxuesheng @xuehao int,@xingming varchar,@banji varchar,@zhuanye varchar,@nianling int,@xingbie varchar AS
insert 学生(学号,姓名,班级,专业,年龄,性别) values(@xuehao,@xingming,@banji,@zhuanye,@nianling,@xingbie)
GO

我这样执行:exec insertxuesheng @xuehao=100,@xingming=速度,@banji=五班,@zhuanye=软件,@nianling=15,@xingbie=男
报错:INSERT 语句与 COLUMN CHECK 约束 'CK_学生' 冲突。该冲突发生于数据库 '沈军辉',表 '学生', column '性别'。
语句已终止。

同学你好!
你这个问题实现的逻辑并没有任何问题,是书写规范的错误。
产生错误的原因:
@xingbie varchar 这样书写是错误的,应改成
@xingbie varchar(2) ,即加上数据类型长度。
规范完代码后运行就正确了。
规范代码如下:
drop proc proc_insertxuesheng
CREATE PROCEDURE proc_insertxuesheng @xuehao int,@xingming varchar(20),@banji varchar(20),@zhuanye varchar(20),@nianling int,@xingbie varchar(2)
AS
insert stu
values(@xuehao,@xingming,@banji,@zhuanye,@nianling,@xingbie)
GO
exec proc_insertxuesheng @xuehao=100,@xingming='速度',@banji='五班',@zhuanye='软件',@nianling=15,@xingbie='男'
总结:
1,建议你建库,表等字段名(列名)都用英文
2,存储过程声明变量的数据类型请写上长度(应和建表时定义的长度相匹配)
3,调用存储过程给列赋值时,请将字符串型数据加单引号
以后要细心哦~祝你学习顺利!

字符类型加单引号'男'