【问题标题】:SQL Server 2012 : Create TableSQL Server 2012:创建表
【发布时间】:2016-04-15 00:19:02
【问题描述】:
CREATE TABLE Schedule 
(
     Section DATETIME NOT NULL PRIMARY KEY(CourseID, Section, EmployeeID),
     CourseID VARCHAR(10) REFERENCES Course(CourseID) NOT NULL,
     EmployeeID VARCHAR(20) NOT NULL REFERENCES Employee(EmployeeID),
     StartTime TIME NULL,
     Days DATE NULL,
     Length TIME NULL
)

CREATE TABLE Enrollment 
(
     StudentID INT Primary key (StudentID, CourseID, Section) NOT NULL,
     CourseID VARCHAR(10) REFERENCES Course(CourseID) NOT NULL,
     Section DATETIME NOT NULL REFERENCES Schedule(Section)
)

第二个表没有被创建,我哪里出错了?

【问题讨论】:

  • 您使用的是什么 DBMS?您收到的确切错误消息是什么?您丢弃了一堆没有相关信息的未格式化 SQL,并说“它不起作用*。
  • 什么数据库?错误是什么??
  • 它是 SQL Server 2012 并且错误是“引用表 'Schedule' 中没有与外键 'FK__Enrollmen__Secti__52593CB8' 中的引用列列表匹配的主键或候选键。

标签: sql sql-server-2012


【解决方案1】:

这是因为您将 Schedule 表中的主键设置为自然键/组合键。

尝试为此创建一个独立的列。我在下面包含了一个显示差异的示例。

CREATE TABLE DBO.PK_TEST (
                       Col_A INT NOT NULL
                      ,Col_B INT NOT NULL
                      ,Primary Key(Col_A,Col_B)
                      )


Create table DBO.PK_TEST_2 (
                            Col_A int NOT NULL
                           ,Col_B int NOT NULL
                           ,Col_C as (cast(Col_A as nvarchar) 
                           + cast(Col_B as nvarchar)) PERSISTED NOT NULL
                           ,primary key(Col_C)
                           )

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2012-11-18
    • 2013-04-28
    相关资源
    最近更新 更多