T-SQL:修改了CREATE TABLE脚本到ALTER TABLE脚本崩溃

时间:2012-08-16 07:39:51

标签: sql sql-server tsql alter-table create-table

此脚本是从SQL Server Management Studio生成的。为什么我会收到此错误以及如何修复ALTER脚本?请注意,我将“CREATE”改为“ALTER”。所以我猜测CREATE语法与ALTER语法略有不同,或者限制较少。我正在使用SQL Server 2008 Express。我看到它告诉我以分号结束,但我想确保终止声明不会在以后引起任何问题。如果您可以描述每个查询的作用以及我们正在改变的内容,则奖励积分。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--CREATE TABLE [dbo].[defect](
ALTER TABLE [dbo].[defect](
    [defect_id] [bigint] IDENTITY(1,1) NOT NULL,
    [defect_number] [nvarchar](50) NULL,
    [defect_type] [nvarchar](50) NULL,
    [date_created] [datetime] NULL,
    [user_identified_by] [nvarchar](50) NULL,
    [status] [nvarchar](50) NULL,
    [date_modified] [datetime] NULL,
    [user_qa] [nvarchar](50) NULL,
    [severity] [nvarchar](50) NULL,
    [environment] [nvarchar](50) NULL,
    [user_assigned] [nvarchar](50) NULL,
    [project] [nvarchar](50) NULL,
    [target_table_affected] [nvarchar](50) NULL,
    [required_for_go_live] [nvarchar](50) NULL,
    [project_phase] [nvarchar](50) NULL,
    [completion_hours] [nvarchar](50) NULL,
    [date_migrate_prod] [datetime] NULL,
    [description] [text] NULL,
    [table_columns_affected] [text] NULL,
    [sample_data] [text] NULL,
    [action_taken] [text] NULL,
    [supp_detail_links] [text] NULL,
    [supp_detail_links_dtml] [text] NULL,
    [thread] [bigint] NULL,
 CONSTRAINT [PK_defect] PRIMARY KEY CLUSTERED 
(
    [defect_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] TEXTIMAGE_ON [PRIMARY]
GO

错误:

  

Msg 102,Level 15,State 1,Line 1
  '('。)附近的语法不正确   消息319,级别15,状态1,行29   关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪   context子句,前一个语句必须以a结尾   分号。

3 个答案:

答案 0 :(得分:1)

ALTER TABLECREATE TABLE是两个完全不同的SQL语句,只需将CREATE替换为ALTER就无法实现,因此生成ALTER的方式是错误的,你能做的是

  1. 每次更改任何Table或db对象时,只需使用SSMS中提供的ALTER选项生成Change Script脚本。
  2. 或者你可以使用VS2010生成Alter脚本(google for it,因为我不会在这里写这个)或任何第三方脚本生成器,可以在互联网上轻松获取
  3. 此外,不是在SO上发布SQL语句以供其他人为您解释,而是给SQL学习一些时间(至少在线使用SQL书籍,与SQL服务器一起安装)。

答案 1 :(得分:0)

如果要添加列,则语法为

ALTER TABLE [dbo].[defect]
ADD
    [defect_id] [bigint] IDENTITY(1,1) NOT NULL,
...

如果您想更改列的大小

ALTER TABLE [dbo].[defect]
    ALTER COLUMN [completion_hours] [nvarchar](50) NULL

http://msdn.microsoft.com/en-us/library/ms190273.aspx

您将来可以做的是更改DEV上的列定义,然后单击SSMS设计视图中的Script Changes按钮,并将该脚本应用于您的QA环境。

存在这些“奇特工具”的原因是因为这有点痛苦。如果这只是一个预算问题,那么Microsoft SSDT可能更符合您的喜好http://msdn.microsoft.com/en-us/data/tools.aspx

答案 2 :(得分:0)

ALTER和CREATE与存储过程的工作方式不同。 使用此链接可以准确了解表上ALTER语句的工作原理。

http://www.w3schools.com/sql/sql_alter.asp