Как удалить столбец из существующей таблицы?

Как удалить столбец из существующей таблицы?

У меня есть таблица MEN с Fname и Lname

Мне нужно удалить Lname

Как это сделать?

Ответ 1

ALTER TABLE MEN DROP COLUMN Lname

Ответ 2

Generic:

ALTER TABLE table_name DROP COLUMN column_name;

В вашем случае:

ALTER TABLE MEN DROP COLUMN Lname;

Ответ 3

Ваш пример прост и не требует каких-либо дополнительных изменений таблицы, но, вообще говоря, это не так просто.

Если этот столбец ссылается на другие таблицы, вам нужно выяснить, что делать с другими таблицами/столбцами. Один из вариантов - удалить внешние ключи и сохранить ссылки на данные в других таблицах.

Другой вариант - найти все ссылочные столбцы и удалить их, если они больше не нужны.

В таких случаях реальной проблемой является поиск всех внешних ключей. Вы можете сделать это, запросив системные таблицы или использовать сторонние инструменты, такие как ApexSQL Search (бесплатно) или Red Gate Dependency tracker (премиальные, но дополнительные функции). Там целый поток на внешние ключи здесь

Ответ 4

Это правильный ответ:

ALTER TABLE MEN DROP COLUMN Lname

Но... если a CONSTRAINT существует на COLUMN, тогда вы должны DROP CONSTRAINT, тогда вы сможете DROP COLUMN. Чтобы удалить a CONSTRAINT, запустите:

ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}

Ответ 5

В SQL Server 2016 вы можете использовать новые инструкции DIE.

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

Вышеупомянутый запрос повторно запускает его drops в столбце, только если он exists в таблице, иначе он не будет вызывать ошибку.

Вместо того, чтобы использовать большие IF обертки для проверки существования column перед его удалением, вы можете просто запустить приведенный выше оператор DDL

Ответ 6

Вопрос в том, можете ли вы удалять только столбец из переходящей таблицы;-)

BEGIN TRANSACTION

IF exists (SELECT * FROM  sys.columns c 
INNER JOIN  sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
    BEGIN TRY
        ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
    END TRY
    BEGIN CATCH
        print 'FAILED!'
    END CATCH
ELSE
    BEGIN 
        SELECT ERROR_NUMBER() AS ErrorNumber;
        print 'NO TABLE OR COLUMN FOUND !'
    END 

COMMIT  

Ответ 7

Простой ответ на этот вопрос:

ALTER TABLE MEN DROP COLUMN Lname;

Можно указать несколько столбцов:

ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;

С SQL Server 2016 также можно оставить только столбец, если он существует. Это мешает вам получить сообщение об ошибке, о которой вы, вероятно, не заботитесь.

ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;

Есть несколько предпосылок для удаления столбцов. Столбцы не могут быть:

  • Используется индексом
  • Используется ограничениями CHECK, FOREIGN KEY, UNIQUE или PRIMARY KEY
  • Связано с DEFAULT
  • Связано с правилом

Если какое-либо из вышеуказанных утверждений верно, вам необходимо сначала отказаться от этих ассоциаций.

Кроме того, следует отметить, что удаление столбца не возвращает пространство с жесткого диска, пока не будет перестроен индекс кластеризации таблицы. Как правило, неплохо было бы следовать приведенному выше примеру команды перестроить таблицу следующим образом:

ALTER TABLE MEN REBUILD;

Наконец, как утверждают некоторые, это может быть медленным и, вероятно, заблокирует таблицу на время. Можно создать новую таблицу с нужной структурой, а затем переименовать ее следующим образом:

SELECT 
   Fname 
   -- Note LName the column not wanted is not selected
INTO 
   new_MEN
FROM
   MEN;

EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';

DROP TABLE old_MEN;

Но будьте осторожны, есть окно для потери данных вставленных строк здесь между первой командой select и последней командой rename.

Ответ 8

Чтобы добавить столбцы в существующую таблицу:

ALTER TABLE table_name
 ADD
 column_name DATATYPE NULL  

Чтобы удалить столбцы в существующей таблице:

ALTER TABLE table_name
DROP COLUMN column_name

Ответ 9

Это также можно сделать с помощью графического интерфейса SSMS. Самое приятное в этом методе - это предупреждение о том, есть ли какие-либо отношения в этом столбце и также может автоматически их удалить.

  • Поместите таблицу в представление "Дизайн" (щелкните правой кнопкой мыши по таблице) следующим образом:

введите описание изображения здесь

  1. Щелкните правой кнопкой мыши по столбцу в представлении "Дизайн таблицы" и нажмите "Удалить Колонка "

введите описание изображения здесь

Как я уже говорил, если есть какие-либо отношения, которые также необходимо будет удалить, он попросит вас в этот момент, если вы также захотите их удалить. Вам, вероятно, потребуется сделать это, чтобы удалить столбец.

Ответ 10

Синтаксис:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;

Например:

alter table Employee drop column address;

Ответ 11

Если вы используете С# и столбец Identity имеет тип int, создайте новый экземпляр int, не предоставляя ему никакого значения. Это сработало для меня.

[identity_column] = new int()