T-SQL:修改了创建表脚本以改变表脚本崩溃

T-SQL:修改了创建表脚本以改变表脚本崩溃,sql,sql-server,tsql,alter-table,create-table,Sql,Sql Server,Tsql,Alter Table,Create Table,此脚本是从SQL Server Management Studio生成的。为什么会出现此错误,如何修复ALTER脚本?注意,我将单词“CREATE”改为“ALTER”。所以我猜CREATE语法与ALTER语法略有不同,或者限制较少。我正在使用SQLServer2008Express。我看到它告诉我以分号结束,但我想确保终止该语句不会在以后给我带来任何问题。如果您能描述每个查询的作用以及我们正在更改的内容,将获得奖励积分 SET ANSI_NULLS ON GO SET QUOTED_IDENTI

此脚本是从SQL Server Management Studio生成的。为什么会出现此错误,如何修复ALTER脚本?注意,我将单词“CREATE”改为“ALTER”。所以我猜CREATE语法与ALTER语法略有不同,或者限制较少。我正在使用SQLServer2008Express。我看到它告诉我以分号结束,但我想确保终止该语句不会在以后给我带来任何问题。如果您能描述每个查询的作用以及我们正在更改的内容,将获得奖励积分

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
错误:

味精102,第15级,状态1,第1行
“(”附近的语法不正确。
Msg 319,第15级,状态1,第29行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces子句或更改跟踪语句 在上下文子句中,前一个语句必须以 分号


如果要添加列,语法为

ALTER TABLE [dbo].[defect]
ADD
    [defect_id] [bigint] IDENTITY(1,1) NOT NULL,
...
如果要更改列的大小

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

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


为什么会有这些“奇特的工具”存在是因为这有点痛苦。如果这只是一个预算问题,那么Microsoft SSDT可能更符合您的喜好

ALTER TABLE
CREATE TABLE
是两个完全不同的SQL语句,您无法通过简单地将
CREATE
替换为
ALTER
来实现,因此您生成你的圣坛错了,你能做的就是

  • 每次更改任何表或db对象时,只需使用SSMS中可用的
    Change script
    选项生成
    ALTER
    脚本即可
  • 或者,您可以使用VS2010(google for it,因为我不在这里写这篇文章)或任何第三方脚本生成器生成Alter脚本,这些都可以在互联网上轻松获得

  • 此外,与其发布SQL语句以便其他人为您解释,不如花点时间进行SQL学习(至少使用SQL server安装的SQL联机丛书)。

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


    我们从这个答案中假设了很多。您能描述一下我们在这里做的事情吗?并描述一下新代码是什么?您是说您刚刚添加了关键字“ADD”开始,就这样?我可以,但我不清楚你想做什么。你的出发点是什么?你想改变现有表的结构,还是向现有表添加列?@MacGyver-你需要明确说明你想对表做什么改变。[您不能重新包含已经存在的所有内容,因此,在我们知道哪些行是真正的更改之前,我们无法告诉您如何更改代码。也许您可以先在联机丛书中查看语法?]我有两个数据库。DEV和QA。我在设计模式下修改了这个表,并在DEV中添加了一些列,现在我让QA与DEV保持一致。我没有使用redgatesqlcompare(或任何其他奇特的工具)用于在数据库之间进行区分。基本上,我只是创建了一个脚本来重新构建整个数据库,我正在为迁移脚本挑选片段。@MacGuyver-如果您不使用工具来识别更改,您需要自己识别它们。但您不能只更改
    创建表
    脚本的片段来进行
    更改表
    script。例如,使用SQL Server Management Studio对表进行更改,但要求它创建一个脚本,而不是进行更改。然后,您将有一个清楚的示例,说明两者有多不同。我很惊讶我的问题得到了-2,但我因此获得了“热门问题”徽章。