2012-12-03 45 views
-2

我有一個數據庫應用程序,他們工作得很好,一切都很好。如何創建一個用於修改數據庫中現有表而不丟失現有信息的腳本?

現在,我只需要通過添加更多列來修改數據庫中的一個表。我正在使用SQL Server,數據庫管理員要求我爲他提供修改該表的腳本。

那麼該怎麼做?

我正在使用SQL Server Management Studio,當我單擊表格右鍵時,我用來選擇腳本來創建,而Management Studio會給我腳本。現在,這個表有信息,所以我認爲我不應該爲這個表使用創建腳本。

新列應該允許空值。

那麼,我應該使用什麼?

爲了您的信息,下面是用於創建表的腳本:應該添加到此表的新列的

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[Test](
    [ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL, 
    [No] [char](20) NOT NULL, 
    [Date] [smalldatetime] NULL, 
    [ProjectType] [char](500) NULL, 
    [ProjectPhase] [char](300) NULL, 
    [rejected_reason] [varchar](max) NULL, 
    [archived_reason] [varchar](max) NULL, 
    [forward_to] [varchar](max) NULL, 
    [forward_type] [varchar](max) NULL, 
    [forward_concern] [varchar](max) NULL, 
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
    [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 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_No] DEFAULT ('*') FOR [No] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_Status] DEFAULT ((2)) FOR [Status] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_AID] DEFAULT ((0)) FOR [AID] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_Hit] DEFAULT ((0)) FOR [Hit] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_Sent] DEFAULT ((0)) FOR [Sent] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLATestB_SentTo] DEFAULT ((0)) FOR [SentTo] 
GO 

ALTER TABLE [dbo].[Test] ADD CONSTRAINT [DF_LLa_Added_To_Cart] DEFAULT ((0)) FOR [Added_To_Cart] 
GO 

的例子是:

[rejected_reason] [varchar](max) NULL, 
[archived_reason] [varchar](max) NULL, 
[forward_to] [varchar](max) NULL, 
[forward_type] [varchar](max) NULL, 
+1

在線閱讀書籍:ALTER TABLE –

回答

0

當你研究SQL Server Books Online on MSDN,它應該是一塊蛋糕 - 使用ALTER TABLE

ALTER TABLE dbo.LLa 
ADD [rejected_reason] [varchar](max) NULL 

ALTER TABLE dbo.LLa 
ADD [archived_reason] [varchar](max) NULL 

ALTER TABLE dbo.LLa 
ADD [forward_to] [varchar](max) NULL 

ALTER TABLE dbo.LLa 
ADD [forward_type] [varchar](max) NULL 

問題是:你是否真的需要需要高達2 GB的數據(VARCHAR(MAX))爲你的每個列在這裏?似乎有點矯枉過正!

您應該始終使用適當的數據類型 - 如果該列最多隻能容納100個字符 - 爲什麼不使用VARCHAR(100)而不是使用最大數據類型?

相關問題