-1

此脚本是从 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
'(' 附近的语法不正确
。Msg 319, Level 15, State 1, Line 29
关键字'with'附近的语法不正确。如果此语句是公共表表达式,则为 xmlnamespaces 子句或更改跟踪上下文子句,前面的语句必须以分号结束。

4

3 回答 3

1

ALTER TABLE并且CREATE TABLE是两个完全不同的 SQL 语句,您无法通过简单地替换CREATEALTER实现,因此您生成 ALTER 的方式是错误的,您可以做的是

  1. 每次更改任何 Table 或 db 对象时,您都可以使用 SSMS 中可用的选项简单地生成ALTER脚本。Change Script
  2. 或者,您可以使用 VS2010(谷歌为它,因为我不会在这里写这个)或任何第三方脚本生成器生成 Alter 脚本,在互联网上很容易获得

此外,与其在 SO 上发布 SQL 语句让其他人为您解释它们,不如花一些时间学习 SQL(至少使用 SQL 在线书籍,与 SQL 服务器一起安装)。

于 2012-08-16T07:53:35.567 回答
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 上的列定义,然后单击Script ChangesSSMS 设计视图中的按钮并将该脚本应用于您的 QA 环境。

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

于 2012-08-16T07:41:57.927 回答
0

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

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

于 2012-08-16T07:57:46.447 回答