При добавлении столбца, я должен создать и удалить вместо изменения?

Я пытаюсь добавить столбец в конец таблицы в SQL следующим образом:

  1. Открыть дизайн-представление
  2. Добавить столбец
  3. Создать и скопировать скрипт
  4. Запустите, затем сохраните скрипт

Почему-то, когда мои коллеги делают это, он генерирует обычные ALTER TABLE скрипт.

Когда я пытаюсь это сделать, он генерирует скрипт, который создает временную таблицу, затем удаляет существующую таблицу, а затем заменяет исходную таблицу временной таблицей, например, так:

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.Table_Name
    DROP CONSTRAINT DF_Table_Name_NewColumnName
GO
CREATE TABLE dbo.Tmp_Table_Name
    (
    Id int NOT NULL IDENTITY (1, 1),
    Column1 varchar(16) NOT NULL,
    NewColumnName int NOT NULL,
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_Table_Name SET (LOCK_ESCALATION = TABLE)
GO
ALTER TABLE dbo.Tmp_Table_Name ADD CONSTRAINT
    DF_Table_Name_NewColumnName DEFAULT ((1)) FOR NewColumnName
GO
SET IDENTITY_INSERT dbo.Tmp_Table_Name ON
GO
IF EXISTS(SELECT * FROM dbo.Table_Name)
     EXEC('INSERT INTO dbo.Tmp_Table_Name (Id, Column1, NewColumnName)
        SELECT Id, Column1, NewColumnName FROM dbo.Table_Name WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_Table_Name OFF
GO
DROP TABLE dbo.Table_Name
GO
EXECUTE sp_rename N'dbo.Tmp_Table_Name', N'Table_Name', 'OBJECT' 
GO
ALTER TABLE dbo.Table_Name ADD CONSTRAINT
    PK_Table_Name PRIMARY KEY CLUSTERED 
    (
    Id
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT

Я могу понять, почему это может быть сделано, если я удаляю столбцы или добавляю столбцы в середине таблицы, но это не так, я просто добавляю столбец в конец таблицы.

Эта проблема фактически привела к тому, что SQL Server удалил все данные в таблице, если с дизайном что-то не так (изначально я понял это, забыв добавить значение по умолчанию в необходимый столбец, он стер все данные в таблице). К счастью только в среде разработки).

1 ответ

Решение

Не ясно, почему SQL Server делает это. Эти ссылки могут предоставить некоторую информацию об изменении таблиц в SQL Server

SQL Server - Изменить таблицу против удаления и создания

Изменить таблицы проблем

Другие вопросы по тегам