【问题标题】:Operand type clash: int is incompatible with date + The INSERT statement conflicted with the FOREIGN KEY constraint操作数类型冲突:int 与日期不兼容 + INSERT 语句与 FOREIGN KEY 约束冲突
【发布时间】:2011-11-02 20:17:27
【问题描述】:
create table pilot (
emp_num int,
pl_license varchar (3),
pl_ratings varchar (30),
pl_med_type int,
pl_med_date date,
pl_pt135_date date,
constraint PK_pilot primary key (emp_num)
)

insert into pilot(emp_num,pl_license,pl_ratings,pl_med_type,pl_med_date,pl_pt135_date)
values (101,'ATP','SEL/MEL/instr/CFII',1,12-4-2005,15-6-2005)
insert into pilot(emp_num,pl_license,pl_ratings,pl_med_type,pl_med_date,pl_pt135_date)
values (104,'ATP','SEL/MEL/instr',1,10-5-2005,23-3-2006)
insert into pilot(emp_num,pl_license,pl_ratings,pl_med_type,pl_med_date,pl_pt135_date)
values (105,'COM','SEL/MEL/instr/CFI',2,25-2-2006,12-2-2005)
insert into pilot(emp_num,pl_license,pl_ratings,pl_med_type,pl_med_date,pl_pt135_date)
values (106,'COM','SEL/MEL/instr',2,02-4-2006,24-12-2005)
insert into pilot(emp_num,pl_license,pl_ratings,pl_med_type,pl_med_date,pl_pt135_date)
      values (109,'COM','SEL/MEL/instr/CFII',1,14-4-2006,21-4-2006)

我的问题是每次插入都有错误

操作数类型冲突:int 与日期不兼容

如何解决这个问题?


这里也...

create table employee (
emp_num int,
constraint PK_employee primary key (emp_num),
foreign key(emp_num) references pilot(emp_num),
emp_title varchar (4),
emp_lname varchar (20),
emp_fname varchar (30),
emp_initial varchar (2),
emp_dob date,
emp_hire_date date, 
)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (100,'Mr.','Kolmycz','George','D',15-5-1942,15-3-1987)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (101,'Ms.','Lewis','Rhonda','G',19-3-1965,25-4-1988)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (102,'Mr.','Vandam','Rhett',' ',14-11-1958,20-12-1992)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (103,'Ms.','Jones','Anne','M',16-10-1974,28-8-2005)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (104,'Mr.','Lange','John','P',08-11-1971,20-10-1996)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (105,'Mr.','williams','Robert','D',14-3-1975,08-1-2006)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (106,'Mrs.','Duzak','Jeanine','K',12-2-1968,05-1-1991)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (107,'Mr.','Diante','Jorge','D',21-8-1974,05-1-1991)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (108,'Mr.','Wlesenbach','Paul','R',14-2-1966,18-11-1994)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (109,'Ms.','Travis','Elizabeth','K',18-6-1961,14-4-1991)
insert into employee(emp_num,emp_title,emp_lname,emp_fname,emp_initial,emp_dob,emp_hire_date)
values (110,'Mrs.','Genkazi','Leighla','W',19-5-1970,01-12-1992)        

消息 547,第 16 级,状态 0,第 1 行 INSERT 语句与 FOREIGN KEY 约束“FK__crew__emp_num__0F975522”冲突。冲突发生在数据库“melisa”、表“dbo.employee”、列“emp_num”中。错误 这张表

create table earndrating(
emp_num int,
constraint PK_earndarating primary key(emp_num, rtg_code),
rtg_code varchar(6),
foreign key (emp_num) references pilot(emp_num),
foreign key(rtg_code) references rating(rtg_code),
earningth_date varchar(20),
)
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(101,'CFI','18-Feb-98' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(101,'CFII','14-Dec-05' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(101,'INSTR','08-Nov-93' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(101,'MEL','23-Jun-94' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(101,'SEL','21-Apr-93' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(104,'INSTR','14-Jul-96' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(104,'MEL','29-Jan-97' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(104,'SEL','12-Mar-95' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(105,'CFI','18-Nov-97' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(105,'INSTR','17-Apr-95' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(105,'MEL','12-Aug-95' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(105,'SEL','23-Sep-94' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(106,'INSTR','20-Dec-95' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(106,'MEL','02-Apr-95' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(105,'SEL','10-Mar-94' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'CFI','05-Nov-98' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'CFII','21-Jun-03' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'INSTR','23-Jul-96' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'MEL','15-Marc-97' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'SEL','05-Feb-96' )
    insert into earndrating(emp_num,rtg_code,earningth_date)
    values(109,'SES','12-May-96' )

【问题讨论】:

  • 您的问题现在已经改变。最初是日期字符串的格式,现在是外键约束。在后一种情况下,这意味着您正在向earndrating.emp_num 中插入不存在于pilot.emp_num 中的值。
  • 不知道为什么这被否决了这么多次。这个问答帮助了我。

标签: sql sql-server tsql


【解决方案1】:

这个表达式12-4-2005 是一个计算的int,值为-1997。你应该这样做,而不是 '2005-04-12'' 之前和之后。

【讨论】:

  • 它不起作用,从字符串转换日期和/或时间时出现一个新错误,提示插入 Msg 241, Level 16, State 1, Line 1 Conversion failed。
  • @Jeo Talavera:尝试使用 ISO-8601 格式!使用 '20050412' 作为您的日期 - YYYYMMDD - 无论您的 SQL Server 语言和区域设置如何,都可以使用......
  • @Jeo Talavera - 你用' 换行了吗并且 更改为yyyy-mm-dd
  • 实际上与DATE 不同(与DATETIME/SMALLDATETIME 不同),无论语言/区域设置如何,yyyy-mm-dd 都可以工作。
【解决方案2】:

尝试将日期用单引号括起来,如下所示:

'15-6-2005'

应该可以这样解析日期。

【讨论】:

  • 它不起作用,从字符串转换日期和/或时间时出现一个新错误,提示插入 Msg 241, Level 16, State 1, Line 1 Conversion failed。
  • @Jeo Talavera:您的示例中有几个插入语句。这个错误不是来自下一个插入语句吗?将上述答案应用于所有插入中的所有日期字段。
  • 你为什么建议 dd-m-yyyy?应该是 yyyy-mm-dd。
  • @Aaron Bertrand:我没有建议。那是他的密码。我想他可能是英国人,所以我就不管了;)我只是用引号括起来。
  • @Jeo 的重点是您应该使用 SAFE 格式,因为您不安全的 mm-dd-yyyy 格式可能无法在其他服务器或其他用户上使用。试试SET LANGUAGE FRENCH; DECLARE @d DATE = '06-15-2011';
【解决方案3】:

仅供参考,这对我来说是个问题,我在如下语句中有两个表:

SELECT * FROM table1
UNION ALL
SELECT * FROM table2

它起作用了,但是随后某个表定义中的列顺序发生了变化。将 * 更改为 SELECT column1, column2 解决了该问题。不知道这是怎么发生的,但吸取了教训!

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。我尝试了'yyyy-mm-dd'格式,即'2013-26-11'并摆脱了这个问题......

    【讨论】:

    • 'yyyy-mm-dd' '2013-26-11' :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多