При добавлении столбца, я должен создать и удалить вместо изменения? - PullRequest
0 голосов
/ 12 декабря 2018

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

  1. Открыть представление Design
  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 Ответ

0 голосов
/ 12 декабря 2018

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

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

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

...