2012-08-16 84 views
-1

此腳本是從SQL Server Management Studio生成的。爲什麼我得到這個錯誤,我該如何解決ALTER腳本?請注意,我將單詞「CREATE」更改爲「ALTER」。所以我猜CREATE語法與ALTER語法略有不同,或者有更少的限制。我正在使用SQL Server 2008 Express。我看到它告訴我以分號結束,但我想確保終止該聲明以後不會引起任何問題。如果您可以描述查詢的每一部分以及我們正在更改的內容,則會獎勵獎勵積分。T-SQL:對ALTER TABLE腳本崩潰修改CREATE TABLE腳本

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
Incorrect syntax near '('.
Msg 319, Level 15, State 1, Line 29
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

回答

1

ALTER TABLECREATE TABLE是兩個,你不能簡單地用ALTER更換CREATE acheive完全不同的SQL語句,讓你產生你的改變方式是錯誤的,你所能做的就是

  1. 您可以使用現有的Change Script選項SSMS每次當您更改任何表或數據庫對象只是產生ALTER腳本。
  2. 另外,您可以使用VS2010生成修改腳本,(谷歌它,因爲我不打算寫這個位置)或任何第三方的腳本生成,容易獲得互聯網上

另外,除了張貼在SO SQL語句讓其他人爲你解釋它們,給予SQL學習一段時間(至少在線使用SQL書籍,使用SQL服務器安裝)。

+0

+1僅用於在線推薦圖書。 – MatBailie 2012-08-16 07:56:21

+0

我很驚訝,我的問題得到了-2,但我爲它贏得了「熱門問題」徽章。 – MacGyver 2013-03-13 17:09:03

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環境。

這些「奇特的工具」存在的原因是因爲這有點痛苦。如果它只是一個預算的問題,那麼微軟SSDT可能會根據自己的喜好http://msdn.microsoft.com/en-us/data/tools.aspx

+0

我們假設從這個答案很多。你能否更好地描述我們在這裏做的事情,並描述一下新的代碼是什麼?你是說你剛剛在關鍵字「ADD」中添加了關鍵字,就是這樣嗎? – MacGyver 2012-08-16 07:44:21

+0

我可以,但我不清楚你在做什麼。你的出發點是什麼?您是想要改變現有表格的結構,還是將列添加到現有表格? – podiluska 2012-08-16 07:45:58

+0

@MacGyver - 你需要特別說明***你想對桌子做些什麼改變。 * [你不能重新包含已經存在的所有內容,直到我們知道哪些行是真正的更改,我們不能告訴你如何更改代碼。也許你可以檢查在線書籍的語法作爲開始?] * – MatBailie 2012-08-16 07:48:53