如何从现有表中删除列?

我有一个Fname和Lname的table MEN

我需要删除Lname

怎么做呢?


当前回答

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

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

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

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

其他回答

在现有表中添加列:

ALTER TABLE table_name
 ADD
 column_name DATATYPE NULL  

删除现有表中的列。

ALTER TABLE table_name
DROP COLUMN column_name

泛型:

ALTER TABLE table_name DROP COLUMN column_name;

在你的情况下:

ALTER TABLE MEN DROP COLUMN Lname;

这也可以通过SSMS GUI来完成。这个方法的好处是它会警告你是否该列上有任何关系,也可以自动删除这些关系。

将表格放入设计视图(右键单击表格),如下所示:

右键单击表的Design视图中的列,然后单击“Delete” 列”

如前所述,如果有任何关系也需要删除,此时它将询问您是否也想删除这些关系。您可能需要这样做来删除列。

ALTER TABLE MEN DROP COLUMN Lname

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

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