我的create table SQL出了什么问题?

时间:2009-06-21 10:24:16

标签: sql-server-2008

我正在使用SQL Server 2008管理工作室来执行以下SQL语句,这里是来自SQL Server管理工作室的相关错误消息。有什么想法是错的吗?

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

Create TABLE [dbo].[BatchStatus](
    [BatchID] [uniqueidentifier] NOT NULL CONSTRAINT [PK_BatchStatus_ID],
    [BatchStatus] [int] NULL,
    CONSTRAINT [PK_BatchStatus_ID] PRIMARY KEY CLUSTERED 
    (
        [BatchID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO



Msg 102, Level 15, State 1, Line 3
Incorrect syntax near ','.
Msg 319, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'with'. If this statement is a common table
expression, an xmlnamespaces clause or a change tracking context clause, the 
previous statement must be terminated with a semicolon.

3 个答案:

答案 0 :(得分:1)

试试这个:

Create TABLE [dbo].[BatchStatus](
    [BatchID] [uniqueidentifier] NOT NULL,
    [BatchStatus] [int] NULL,
    CONSTRAINT [PK_BatchStatus_ID] PRIMARY KEY CLUSTERED 
    (
        [BatchID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

答案 1 :(得分:1)

您正在定义“PK_BatchStatus_ID”约束两次 - 一次在您定义BatchID字段的行上,一次在表定义的末尾。

您可以使用使用列定义约束“inline”:

CREATE TABLE [dbo].[BatchStatus]
    ([BatchID] [uniqueidentifier] NOT NULL 
        CONSTRAINT [PK_BatchStatus_ID] PRIMARY KEY,
    [BatchStatus] [int] NULL
) ON [PRIMARY]

或者你可以定义 AFTER 表格的所有列

CREATE TABLE [dbo].[BatchStatus]
    ([BatchID] [uniqueidentifier] NOT NULL,
    [BatchStatus] [int] NULL,
    CONSTRAINT [PK_BatchStatus_ID] PRIMARY KEY CLUSTERED 
    (
        [BatchID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

但你不能同时拥有(部分)

马克

答案 2 :(得分:0)

也许这就是你真正想要的。指定默认值

的约束
Create TABLE [dbo].[BatchStatus](
    [BatchID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_BatchStatus_ID] DEFAULT((0)),
    [BatchStatus] [int] NULL,
    CONSTRAINT [PK_BatchStatus_ID] PRIMARY KEY CLUSTERED 
    (
        [BatchID] ASC
    ) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]