SSMS生成的命令的重要性是什么(ansi nulls,quoted ident,ansi pad等...)

时间:2011-04-15 02:06:43

标签: sql-server sql-server-2008-r2 ssms ddl

以下是SSMS“Script Table as”生成的脚本 - >“Create To”:

USE [DADatabaseMarch11]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[LoginName](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](255) NOT NULL,
 CONSTRAINT [PK_LoginName] 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],
 CONSTRAINT [IX_LoginName] UNIQUE NONCLUSTERED 
(
    [name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

我只使用SQL 2008 R2而不需要向后兼容性。

我的问题是:上面有哪些内容,出于实际目的,可以省略吗?

1 个答案:

答案 0 :(得分:4)

ANSI_NULLS http://msdn.microsoft.com/en-us/library/ms188048.aspx

您没有对过滤索引,计算列等做任何特殊操作,因此您可以删除它。

QUOTED_IDENTIFIER http://msdn.microsoft.com/en-us/library/ms174393.aspx

非常标准的名字,看起来没有引用,所以它在这里没有效果。

ANSI_PADDING http://msdn.microsoft.com/en-us/library/ms187403.aspx

此设置应始终开启。只有你出于任何原因将它设置为关闭时才需要它。即使这样,它也没有多大作用,因为即使你在LoginName.NAME,

中保留了尾随空格
where name = 'abc'   => will match 'abc   '  (spaces stored)
len(name) = 3     => even if name is 'abc    '

因为在整个SQL Server中,它已经使用尾随空格做了有趣的事情。

您需要的最低限度

CREATE TABLE dbo.LoginName(
    id int IDENTITY NOT NULL,
    name varchar(255) NOT NULL,
CONSTRAINT PK_LoginName PRIMARY KEY
(
    id
),
 CONSTRAINT IX_LoginName UNIQUE
(
    name
)
)
GO
  • 您通常只有一个文件组,名为“PRIMARY”,因此可以使用
  • 索引选项是默认值,仅在调整
  • 时才包含或更改它们
  • 默认情况下,主键始终是群集的,除非另一个已经
  • 唯一键是非群集的,因为主键已经群集
  • []是没有必要的,因为没有使用特殊名称
  • 我离开了dbo.,但说实话,在99%的情况下也可以这样做
  • 没有说明符的IDENTITY是默认值(1,1)