当将varchar值'Ali'转换为数据类型int时,消息245,级别16,状态1,行1转换失败

时间:2012-10-06 19:04:36

标签: sql

create table employee
(
    empID int check(empID>0),
    Fname varchar(50) check(Fname<7),
    Lname varchar(50),
    Salary int check (salary>0),
    Joining_Date date,
    DOB date, 

) ;
insert into employee values (5,'Ali','Murtaza', 30000, '2012-01-12','1984-01-20')

此表给出了上述错误.. 在哪里,我想检查Fname不要超过7..suggest ans please

1 个答案:

答案 0 :(得分:3)

您的检查约束正在尝试查看字符串'Ali'是否小于7。这没有意义。引擎正在尝试将ali转换为无法执行的int。

我猜你的意图是检查以确保fname字符长度小于7.如果是这样,为什么要使用varchar(50)?将其更改为varchar(7)并放弃检查。

fname varchar(7),

如果你真的坚持在检查中这样做,那么你需要这样做:

fname varchar(50) check(length(fname)<7),  /* depending on sql flavor */

如果您尝试做其他事情,请问您的问题并不清楚。

此外,根据您的sql风格(tsql,plsql等),检查约束的形式可能有效,也可能无效。我建议指定您的问题所引用的sql风格。