我有一个数据库的应用程序,它们运行良好,一切都很好。
现在,我只需要通过添加更多列来修改数据库中的一个表。我正在使用SQL Server,数据库管理员让我向他提供修改该表的脚本。
那怎么做?
我正在使用SQL Server Management Studio,当我点击表格右键单击时,我习惯选择要创建的脚本,Management Studio将为我提供脚本。现在,这个表有信息,所以我想我不应该为这个表使用create script。
新列应该允许空值。
那我该怎么用?
有关您的信息,请参阅以下脚本:
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,
答案 0 :(得分: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)
而不是使用max数据类型?