代码之家  ›  专栏  ›  技术社区  ›  the_drow

这个sql create table语句有什么问题?

  •  3
  • the_drow  · 技术社区  · 15 年前

    此SQL查询是由SQL Server管理工作室生成的,它会引发一个错误:

    USE [database_name]
    GO
    /****** Object:  Table [dbo].[UserAddress]    Script Date: 02/17/2010 11:21:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    
    CREATE TABLE [dbo].[UserAddress]
    (
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [UserID] [int] NULL,
        [AddressName] [nvarchar](25) NULL,
        [Fname] [nvarchar](15) NULL,
        [LName] [nvarchar](20) NULL,
        [City] [nvarchar](15) NULL,
        [Street] [nvarchar](30) NULL,
        [StreetNum] [nvarchar](5) NULL,
        [FloorNum] [int] NULL,
        [AptNum] [int] NULL,
        [ZipCode] [int] NULL,
        [Phone] [varchar](15) NULL,
        [Phone_Prefix] [int] NULL,
        [CellPhone] [varchar](15) NULL,
        [CellPhone_Prefix] [int] NULL,
        [Fax] [varchar](15) NULL,
        [Fax_Prefix] [int] NULL,
        [Primary] [bit] NULL,
        CONSTRAINT [PK_UserAddress] PRIMARY KEY CLUSTERED 
        (
            [ID] ASC
        )
        WITH
        (
            PAD_INDEX  = OFF,
            STATISTICS_NORECOMPUTE  = OFF,
            IGNORE_DUP_KEY = OFF,
            ALLOW_ROW_LOCKS  = ON,
            ALLOW_PAGE_LOCKS  = ON
        ) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    SET ANSI_PADDING OFF
    

    错误是: Msg 170, Level 15, State 1, Line 27 Line 27: Incorrect syntax near '('. 指向 [CellPhone_Prefix] [int] NULL, 但我觉得这条线不错。
    怎么了?
    编辑:
    我刚刚评论了

     CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
    (
        [ID] ASC,
        [ClientStoreID] ASC,
        [Uname] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    

    现在它成功了,为什么?
    编辑2:
    我把范围缩小到:

    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
    

    我是不是丢了什么东西?

    1 回复  |  直到 11 年前
        1
  •  9
  •   Simon P Stevens    15 年前

    我认为这是由sql server数据库版本决定的。

    我使用ssms 2005对一个sql server 2000数据库进行了查询,但查询失败,错误与您描述的相同。

    当我连接到sql server 2005服务器时,查询执行得很好。

    你确定检查了你的服务器版本,而不仅仅是你的ssms版本。

    根据 SQL Server 2000 语法上,WITH部分只允许设置fillfactor,而不允许其他设置:

    < table_constraint > ::= [ CONSTRAINT constraint_name ]
    { [ { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        { ( column [ ASC | DESC ] [ ,...n ] ) }
        [ WITH FILLFACTOR = fillfactor ]
        [ ON { filegroup | DEFAULT } ]
    ] 
    

    这与 SQL Server 2008 / 2005 允许括号内有多个选项的语法:

    < table_constraint > ::= [ CONSTRAINT constraint_name ] 
    {  { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        (column [ ASC | DESC ] [ ,...n ] ) 
        [ WITH FILLFACTOR = fillfactor | WITH ( <index_option> [ , ...n ] ) ]
        [ ON { partition_scheme_name (partition_column_name) | filegroup | "default" } ] 
        .
        .
        .
    }