2009-06-21 4 views
1

J'utilise studio de gestion SQL Server 2008 pour exécuter les instructions SQL suivantes, et est ici le message d'erreur lié du studio de gestion SQL Server. Des idées ce qui ne va pas?Quel est le problème avec ma create table SQL?

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. 

Répondre

1

Vous définissez le « PK_BatchStatus_ID » contrainte deux fois - une fois sur la ligne où vous définissez le champ BatchID, une fois à la fin de la définition de table.

Vous pouvez SOIT définir votre contrainte « en ligne » avec la colonne:

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

ou vous pouvez alors définir APRÈS toutes les colonnes du tableau

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] 

mais vous ne peut pas avoir les deux (partiellement)

Marc

+0

Cool! Tu es l'homme! – George2

1

Essayez ceci:

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 
+0

Votre instruction SQL est la même que la mienne? Confused ... :-) – George2

+2

Ce n'est pas. Il a enlevé CONTRAINTE [PK_BatchStatus_ID] après la définition BatchID. – jitter

+0

Merci, votre solution fonctionne! Mais je suis tellement confus, nous ne permettons pas les contraintes après la définition de la colonne? Je copie juste une instruction SQL réalisable de mes projets de version de SQL Server hérités (2005). S'agit-il d'une nouvelle restriction ou grammaire dans SQL Server 2008? – George2

0

Peut-être que c'est ce que vous vouliez vraiment. Une contrainte spécifiant la valeur par défaut

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] 
Questions connexes