只有在sql中存在时才删除列

时间:2017-04-06 11:49:19

标签: mysql sql

伙计我完全是新手..我想要的是删除表中的列只有它存在...任何帮助 这就是我所知道的ALTER TABLE MEN DROP COLUMN Lname但如果只存在于sql ??

中如何制作

5 个答案:

答案 0 :(得分:3)

纯MySQL语法无法实现您的目标。但是,如果您在应用程序中使用API​​或其他东西作为后端。您可以执行以下操作。

IF (SELECT COUNT(*) 
          FROM table_name.columns 
          WHERE 
          TABLE_SCHEMA = 'database_name' 
          AND TABLE_NAME = 'table_name' 
          AND COLUMN_NAME = 'column_name'>0)
BEGIN
 ALTER TABLE table_name DROP COLUMN column_name
END

答案 1 :(得分:2)

下面的代码可以解决您的问题。

if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'mytable' AND COLUMN_NAME = 'mycolumn')) 
begin
     ALTER TABLE 'mytable' DROP COLUMN 'mycolumn'
end

答案 2 :(得分:2)

修复了mIhAwk的答案中的语法错误:

if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'mytable' AND COLUMN_NAME = 'mycolumn')) 
begin
    ALTER TABLE mytable DROP COLUMN mycolumn
end

答案 3 :(得分:1)

正如其他人所说,MySQL不支持DROP COLUMN IF EXISTS,因此您最好的方法就是运行DROP COLUMN,如果列不存在则忽略错误。

前段时间我写了一篇关于使用common_schema模拟DROP COLUMN IF EXISTS的方法。这可能对你有用。有关更多详细信息,请查看相关的blog post

答案 4 :(得分:0)

  

IF EXISTS本身就是一个解决方案!   以下对于MySQL和SqlServer都适用于我-

ALTER TABLE #TempTable DROP COLUMN IF EXISTS [ClientId], [VendorId], [UserId]

它对于多个列也一样具有吸引力!

上进行了测试-mysql Ver 15.1发行版10.1.22-MariaDB,用于Win32(AMD64)和SSMS版本14.0.17254.0 < / p>