2010-01-17 23 views
0

我有一个生成表的脚本 - 只有我的SQL 2008版本抛出一个错误 - 语法已更改?或者我如何手动修复它?SQL 2008创建表方法和KEY

CREATE TABLE ScoHistory (
    CourseID varchar (255) NOT NULL , 
    SessionID int NOT NULL , 
    ScoID varchar (255) NOT NULL , 
    StudentID varchar (255) NOT NULL , 
    DateRecorded datetime NULL , 
    score_raw varchar (12) NULL, 
    KEY student_course_sess_scohist_idx (StudentID, CourseID, SessionID, ScoID) -- this is the bit it doesn't like! It says incorrect syntax near KEY... 
); 

提前许多感谢,

进水口

回答

0

它的工作就是这样,如果这是预期的行为:

CREATE TABLE ScoHistory ( 
    CourseID varchar (255) NOT NULL , 
    SessionID int NOT NULL , 
    ScoID varchar (255) NOT NULL , 
    StudentID varchar (255) NOT NULL , 
    DateRecorded datetime NULL , 
    score_raw varchar (12) NULL, 
    PRIMARY KEY (StudentID, CourseID, SessionID, ScoID) 
); 

它,你只想创建一个非表上的唯一索引,使用CREATE INDEX语句创建索引。

+0

好了 - 所以会发生什么 'student_course_sess_scohist_idx'?我错过了什么吗? :* – Spudhead 2010-01-17 15:42:45

0
CREATE TABLE ScoHistory 
    ( 
    CourseID varchar(255) NOT NULL 
    ,SessionID int NOT NULL 
    ,ScoID varchar(255) NOT NULL 
    ,StudentID varchar(255) NOT NULL 
    ,DateRecorded datetime NULL 
    ,score_raw varchar(12) NULL, 
) ; 

ALTER TABLE dbo.ScoHistory ADD 
CONSTRAINT PK_ScoHistory PRIMARY KEY (StudentID, CourseID, SessionID, ScoID); 
+0

好的 - 那么'student_course_sess_scohist_idx'会发生什么?我错过了什么吗? :* 如果我遵循您的修复方案,会影响任何内容吗? – Spudhead 2010-01-17 15:44:07

+0

这将创建名为'PK_ScoHistory'的索引。如果你更喜欢这个名字,可以用'student_course_sess_scohist_idx'替代'PK_ScoHistory'。您可以在MSSMS(管理工作室)中的Tables/dbo.ScoHistory/Keys'和Tables/dbo.ScoHistory /Indexes‖下看到索引和键名称。 – 2010-01-17 16:13:52

+0

如果您拥有数据库维护代码,可以重建,重新组织,创建索引('ALTER INDEX ...')比使用现有的名称。如果不是这样,那么它就不那么重要了,但是当出现错误时,有一些可识别的索引和约束名称是一件好事。 – 2010-01-17 16:24:34

1

您可以定义一个名为主键表约束是这样的:

CREATE TABLE ScoHistory (
CourseID varchar (255) NOT NULL, 
SessionID int NOT NULL, 
ScoID varchar (255) NOT NULL, 
StudentID varchar (255) NOT NULL, 
DateRecorded datetime NULL, 
score_raw varchar (12) NULL, 
CONSTRAINT student_course_sess_scohist_idx PRIMARY KEY (StudentID, CourseID, SessionID, ScoID) 
);