我正在使用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.
答案 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]