当前位置: 代码迷 >> Sql Server >> Create脚本生成有关问题
  详细解决方案

Create脚本生成有关问题

热度:18   发布时间:2016-04-24 09:37:51.0
Create脚本生成问题
数据版本为:SQL Server 2008 R2
打开Microsoft SQL Server Management Studio,选中目标表后,右键,编写表脚本为,Create 到,获得的脚本如下:
-------------------------------------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING OFF
GO
CREATE TABLE [dbo].[Test](
[f1] [varchar](20) NULL,
[f2] [varchar](25) NOT NULL,
[f3] [nvarchar](255) NULL,
[f4] [varchar](25) NULL
) ON [PRIMARY]
SET ANSI_PADDING ON
ALTER TABLE [dbo].[Test] ADD [f5] [varchar](50) NULL
ALTER TABLE [dbo].[Test] ADD [f6] [nvarchar](10) NULL
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[Test] ADD [f7] [varchar](10) NULL
ALTER TABLE [dbo].[Test] ADD [f8] [varchar](50) NULL
SET ANSI_PADDING ON
ALTER TABLE [dbo].[Test] ADD [f9] [varchar](50) NULL
ALTER TABLE [dbo].[Test] ADD [f10] [datetime] NULL
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[Test] ADD [f11] [varchar](50) NULL
SET ANSI_PADDING ON
ALTER TABLE [dbo].[Test] ADD [f12] [varchar](50) NULL
ALTER TABLE [dbo].[Test] ADD  CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
[f2] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
-------------------------------------------------------------------------
想知道为何有些字段会以ALTER TABLE来添加,而不是都放在CREATE TABLE一块?

------解决思路----------------------
系统把变更的历史记录保存起来;当需要查看时,直接打印历史记录。
------解决思路----------------------
SQL2005没有这样的情况,不过你可以自己动态生成这个脚本
------解决思路----------------------
问题就出在 SET ANSI_PADDING ON (OFF) 上了。

他们的区别是:
设置 OFF 时,varchar 类型,最后面的如果是空格,则要删除 ,char 类型  最后面也不补空格
设置ON时,varchar 按原样写入库中,char 类型,后要要用空格补齐,这也SQL Server 的默认设置。

如果你想让你的 create 语句包含表中的所有字段,必须重建这张表,具体的做法是,把你贴上来的这些语句中的 SET ANSI_PADDING On(OFF) ,都删除 。
  相关解决方案