Таблица сценариев как CREATE включает в себя последние добавления столбцов как ALTERs? - PullRequest
2 голосов
/ 16 сентября 2010

Я использую SQL Server Management Studio 2008 с серверной частью SQL Server 2005.SSMS только что показал поведение, которого я никогда не видел прежде.Я не знаю, является ли это чем-то новым в SSMS 2008 или просто функцией чего-то другого.

По сути, что произошло, когда я добавил несколько новых столбцов в существующую таблицу.После добавления этих столбцов я выполнил «Сценарий таблицы как ... СОЗДАТЬ» в IDE на таблице.Я ожидал получить только один оператор CREATE TABLE со всеми строками, как видимыми, так и новыми.Однако сгенерированный код представлял собой оператор CREATE для исходного определения таблицы, а также отдельные операторы ALTER TABLE T ADD [Column]... для каждого из новых столбцов.

Это не проблема (и фактически может быть полезно източка зрения управления недавними изменениями ... вроде), но такого поведения я никогда не видел.

Я думал, что это может быть связано с длиной строки, но длина входит в числоОграничение в 8000 байт до разбиения страницы таблицы (простите мою терминологию ... Я разработчик, а не администратор баз данных).Конечно, это не маленькая таблица (теперь 127 столбцов с дополнениями и длина строки чуть более 7000 байт).

Что я вижу?Это функция / функция SSMS или самого SQL Server?Является ли это побочным эффектом определения большой таблицы?

Следующий пример не повторяет поведение, но иллюстрирует (упрощенно) то, что я вижу:

CREATE TABLE dbo.Table_1
(
ID int NOT NULL,
title nvarchar(50) NOT NULL
)

Затем,

ALTER TABLE dbo.Table_1 ADD 
[description] [varchar](50) NULL,
[numthing] [nchar](10) NULL

Я ожидал, что это сгенерировано:

CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL,
[description] [varchar](50) NULL,
[numthing] [nchar](10) NULL,

Однако, это сгенерировано:

CREATE TABLE [dbo].[Table_1](
[ID] [int] NOT NULL,
[title] [nvarchar](50) NOT NULL)
ALTER TABLE [dbo].[Table_1] ADD [description] [varchar](50) NULL
ALTER TABLE [dbo].[Table_1] ADD [numthing] [nchar](10) NULL

Ответы [ 2 ]

1 голос
/ 27 ноября 2013

Я подозреваю, что вы "очистили" SQL в своем посте, поскольку он обычно содержит множество других операторов SET и GO.Я предполагаю, что вы удалили операторы "SET ANSI_PADDING".

Для некоторых столбцов в таблице ANSI_PADDING может быть установлено значение ON, а для других значение OFFПараметр ANSI_PADDING влияет на все столбцы, созданные после его установки. Поскольку столбцы будут создаваться в табличном порядке, параметр ANSI_PADDING необходимо будет использовать несколько раз в зависимости от таблицы.Настоящая проблема заключается в том, что MS SQL Server не может установить параметр ANSI_PADDING в операторе CREATE TABLE.Поэтому он должен выполнить часть этой работы после начального CREATE, используя операторы ALTER TABLE после соответствующего оператора SET ANSI_PADDING.

См .: http://kevine323.blogspot.com/2011/03/ansipadding-and-scripting-tables-from.html

1 голос
/ 28 сентября 2010

Я полагаю, что вы видите, как Microsoft повторно использует два раздела кода генерации SQL.

Я предполагаю, что вы не сохранили изменения, когда нажимали для создания сценария CREATE;поэтому код генерации не имеет обновленной версии таблицы, из которой он будет генерироваться.Вместо этого он запускает обычный код генерации для старой таблицы, а затем код за параметром «Изменения сценариев», чтобы привести его в соответствие.

Умное повторное использование кода с особыми результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...