如何从现有表中删除列?

如何从现有表中删除列?

我有一个FnameFnameLname

我需要删除Lname

怎么做?

 ALTER TABLE MEN DROP COLUMN Lname 

通用:

 ALTER TABLE table_name DROP COLUMN column_name; 

在你的情况下:

 ALTER TABLE MEN DROP COLUMN Lname; 

你的例子很简单,不需要任何额外的表更改,但一般来说这并不是那么简单。

如果这个列被其他表引用,那么你需要弄清楚如何处理其他表/列。 一种select是删除外键,并将引用的数据保存在其他表中。

另一个select是find所有的引用列,并删除它们,如果不再需要它们。

在这种情况下,真正的挑战是find所有的外键。 您可以通过查询系统表或使用第三方工具(如ApexSQL Search (免费)或Red Gate Dependency跟踪器 (高级但更多function))来执行此操作。 这里有一个完整的外键

这是正确的答案:

 ALTER TABLE MEN DROP COLUMN Lname 

但是,如果在COLUMN上存在一个CONSTRAINT ,那么你必须首先DROP CONSTRAINT ,然后才能DROP COLUMN 。 为了删除CONSTRAINT ,请运行:

 ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname} 

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

 ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name 

上面的查询是可重新运行的,只有当它exists于表中的情况下才会drops列,否则它不会抛出错误。

在删除之前,不要使用大的IF包装来检查column的存在,而只需运行上面的DDL语句

问题是,你是否只能删除一个未来的表中的列;-)

 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 

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

  1. 在devise视图中放置表格(右键单击表格),如下所示:

在这里输入图像说明

  1. 右键单击表格“devise”视图中的列,然后单击“删除列”

在这里输入图像说明

正如我之前所说的,如果有什么关系还需要删除,那么现在就会问你是否也想删除这些关系。 您可能需要这样做才能删除该列。

在现有表格中添加列:

 ALTER TABLE table_name ADD column_name DATATYPE NULL 

删除现有表中的列:

 ALTER TABLE table_name DROP COLUMN column_name