какова важность сгенерированных SSMS команд (ansi null, заключенный в кавычки, ansi pad и т. д.) - PullRequest
1 голос
/ 15 апреля 2011

Вот сгенерированный сценарий из SSMS «Таблица сценариев как» -> «Создать в»:

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 Ответ

4 голосов
/ 15 апреля 2011

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% случаев
  • ИДЕНТИЧНОСТЬ без спецификаторов по умолчанию (1,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...