如何从现有表中删除列?

我有一个Fname和Lname的table MEN

我需要删除Lname

怎么做呢?


当前回答

如果您正在使用c#,并且Identity列是int,则创建一个int的新实例,而不向它提供任何值。这对我很管用。

[identity_column] = new int()

其他回答

您的示例很简单,不需要任何额外的表更改,但一般来说,这并不是微不足道的。

如果此列被其他表引用,则需要确定如何处理其他表/列。一种选择是删除外键,并在其他表中保留引用数据。

另一种选择是找到所有引用列,如果不再需要,也将它们删除。

在这种情况下,真正的挑战是找到所有外键。您可以通过查询系统表或使用第三方工具,如ApexSQL Search(免费)或Red Gate Dependency tracker(高级但更多功能)来实现这一点。这里有一整个关于外键的线程

问题是,你只能从一个不存在的表中删除一个列吗?

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  
ALTER TABLE MEN DROP COLUMN Lname

在SQL Server 2016中,您可以使用新的DIE语句。

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

上面的查询是可重新运行的,它只在表中存在该列时才删除该列,否则它不会抛出错误。

您可以只运行上述DDL语句,而不是使用大的IF包装器在删除列之前检查列的存在

语法:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;

例如:

alter table Employee drop column address;