执行连接时SQL Server表出错

时间:2016-01-16 18:07:32

标签: mysql sql-server sql-server-2016

我试图在4个表计划表,员工表,机器表和板位表之间执行连接。

问题是,在计划表中,其主键是日期,而表的其余部分的主键为char。我试图将表中的主键转换为char,使其与其他键中的主键相同,但我不知道如何。这是我到目前为止所做的事情

create table Machine
(
    MachineID char(5),
    MachineType varchar(10) NOT NULL,
    MachineStatus varchar(10)NOT NULL
)

create table Employee
(
    EmployeeID char(5) Primary Key,
    EmployeeName varchar(30) NOT NULL,
)

create table Plate
(
    PlateID char(5) Primary Key,
    PlateModel varchar(30) NOT NULL,
)

create table MachineSchedule
(
    DateSchedule date Primary Key,
)

这是我的加入

SELECT Employee.EmployeName, Plate.PlateModel, Machine.MachineID, Machine.MachineType, Machine.MachineStatus
FROM Employee, Plate, Machine
JOIN MachineSchedule
ON MachineSchedule.DateSchedule=Machine.MachineID;

以下是它给出的错误从字符串转换日期和/或时间时转换失败。

3 个答案:

答案 0 :(得分:0)

表格设计及其关系未正确完成。基于这种设计和关系,最简单的解决方案,我的意思是无错误的查询:

DROP TABLE [MachineSchedule];

创建表

CREATE TABLE [dbo].[MachineSchedule](
    [DateSchedule] [date] NOT NULL,
    [MachineID] [char](5) NULL,
PRIMARY KEY CLUSTERED 
(
    [DateSchedule] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

更改了查询

SELECT Employee.EmployeeName, Plate.PlateModel, Machine.MachineID, Machine.MachineType, Machine.MachineStatus
FROM Employee, Plate, Machine
JOIN MachineSchedule
ON MachineSchedule.MachineID = Machine.MachineID;

答案 1 :(得分:0)

您的表结构不正确,您应该使用整数数据类型作为主键而不是char或datetime作为其创建索引,并且我们不能在char和date数据类型上连接表,它们从不具有相同的值;最后,from子句中其他表的连接在哪里。员工,板材,机器应该有加入条件。

并且缺少主键和外键约束

答案 2 :(得分:0)

你想 Date column = char column?

与conver一起使用char 例如

在 cast(m.id as char(20))= ma.id 或者更新列类型