SQL Server 2005生成的创建表脚本无法运行。

5

我正在为一个现有的数据库创建数据库脚本。我尝试使用SQL Server为我生成脚本,但是生成的脚本失败了。我使用“Script Table As”>'CREATE To'>'New Query Editor Window'选项。然后我更改表和约束名称并执行脚本。我被卡住了。有人能看出问题在哪里吗?

我收到这个错误:

Msg 170, Level 15, State 1, Line 17
Line 17: Incorrect syntax near '('.

生成的SQL语句:
USE [MyDatabase]
GO
/****** Object:  Table [dbo].[MyTable2]    Script Date: 01/06/2009 14:40:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MyTable2](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [u_id] [int] NOT NULL,
    [prog_number] [varchar](5) NOT NULL,
    [trans_id] [varchar](50) NULL,
    [code] [varchar](7) NULL,
    [user_num] [char](9) NULL,
    [is_found] [char](9) NULL,
    [status] [char](1) NULL,
    [status2] [char](1) NULL,
    [inserted_timestamp] [datetime] NULL CONSTRAINT [DF_MyTable2_inserted_timestamp]  DEFAULT (getdate()),
    [s_id] [varchar](10) NULL,
    [p_value] [char](4) NULL,
 CONSTRAINT [PK_MyTable2] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
7个回答

10

我遇到了同样的错误。SQL Server Management Studio默认生成适用于SQL Server 2005的脚本,这些脚本与2000不兼容。

我的解决方案:在SQL Server Management Studio中,转到工具>>选项>>脚本。在“常规脚本选项”下,将“脚本服务器版本”设置为“SQL Server 2000”。


这非常有帮助!我正在使用SQL 2008管理工具连接到一个SQL 2000数据库,它生成了针对2008的SQL。通过切换设置,它生成了一个针对SQL 2000的SQL脚本。 - Flea
这似乎是更好的答案,因为它实际上确认了如何解决这个问题。 - Kasaku

9
如果您的目标数据库是SQL 2000,则会对此行提出抱怨。
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]

SQL 2000只支持

WITH FILLFACTOR = 90

所以可能有一些兼容设置可以用于仅生成SQL 2000语法。


谢谢!那就是问题所在。 - l15a
你能告诉我这个设置在哪里吗? - Spidermain50

2

当我使用SQL Server Management Studio 2005在一个SQL Server 2000数据库上生成创建表脚本时,我会遇到完全相同的问题。


1
那就是我的问题。在SQL Server Management Studio中,只需转到“工具/选项/脚本/服务器版本”(我暂时将其更改为SQL Server 2000),然后我就能够克隆表格了。 - JoJo

2

如果您正在运行的是SQL Server 2000数据库,我认为它包含了SQL Server 2000不支持的代码。我从未见过一个将约束条件设置为表定义的一部分的SQL Server 2000脚本。


是的,我以前在使用 SSMS 连接到 SQL 2000 实例时也遇到过这个问题。 - Johnno Nolan

1

我复制/粘贴了这个确切的SQL语句,它对我来说执行得很好。我唯一能想到的是你可能有某些部分被突出显示,只执行了那部分(这可能不是完整的语句)。


我已经尝试了多次,肯定没有任何东西被突出显示。不过还是谢谢你的建议。 - l15a

0

使用 Management Studio 2008,您可以创建一个与较低版本的 SQL Server 兼容的脚本,方法如下:

右键单击数据库 >> 任务 >> 生成脚本

在向导中,您可以访问“服务器版本脚本”选项。只需选择要运行脚本的 SQL Server 版本即可。


0

除了use [MyDatabase]语句(我将其改为tempdb),当我在使用Microsoft SQL Server Management Studio运行它时,这个语句可以正确执行于SQL Server 2005。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接