【问题标题】:What's wrong with this SQL Create Table Statement?这个 SQL 创建表语句有什么问题?
【发布时间】:2011-01-17 18:47:21
【问题描述】:

这个 SQL 查询是由 SQL Server Managment Studio 生成的,它给我一个错误:

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]  

我错过了什么吗?

【问题讨论】:

  • 在 SQL Server 2005 上运行良好。您使用的是什么版本?
  • 我只是在我的工作室中复制粘贴了您的代码,它毫无问题地创建了表格..
  • 如果您使用 SSMS 运行 sql,请确保在运行时不只突出显示部分查询 - 如果这样做,它将只执行突出显示的部分。
  • @adrianbanks:不这样做。
  • 我想知道为什么人们使用查询来创建表,而不是轻松使用一些客户端软件。

标签: sql sql-server create-table


【解决方案1】:

我认为这取决于 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" } ] 
    .
    .
    .
}

【讨论】:

  • 谢谢,以后不会给我添麻烦吗?
  • @the_drow:取决于你在做什么。 SQL server 2008 链接涵盖了所有选项的含义(您只需在页面中搜索)。 sql server 2000 显然不支持这些选项,因此您需要阅读它们并检查您的应用程序中是否依赖于它们的任何行为。
猜你喜欢
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2011-08-28
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多