如果没有使用SQL的另一个表,如何从表中删除列?

问题描述 投票:0回答:2

让我们说吧

Table1有列:Column1 Column2 Column3

表2包含列:Column2 Column3 Column4

我希望删除Column1,因为它不在Table2中。

我猜我需要一个JOIN然后从中删除。我做了一些搜索,发现了这篇文章:How can I get column names from a table in SQL Server?

我试过了:

    SELECT   T.TABLE_NAME AS 'TABLE NAME',
             C.COLUMN_NAME AS 'COLUMN NAME'
    FROM     INFORMATION_SCHEMA.TABLES T
       INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON
             T.TABLE_NAME=C.TABLE_NAME
    WHERE    T.TABLE_TYPE='BASE TABLE'
    AND      T.TABLE_NAME LIKE 'T'

但是我只能为一个表显示列名。我尝试修改它没有运气,当然我也需要删除。即使我可以获得不匹配的列列表也会有所帮助。我不是SQL专家,但就我而言。任何帮助,将不胜感激。谢谢!

sql
2个回答
1
投票

我做了一个简单的查询,检查两个表中包含的列名,然后计算每个名称的出现次数。然后它显示出现少于两次的列,即仅出现在两个表之一中的列。

select name from (
    select [object_id], name from sys.all_columns where [object_id] = (select [object_id] from sys.tables where name = 'Table1')
    UNION ALL
    select [object_id], name from sys.all_columns where [object_id] = (select [object_id] from sys.tables where name = 'Table2')
) o
group by o.name
having count([object_id]) < 2

您可以使用此表中的数据进行单独的“删除列”查询。


1
投票

在这种情况下,您需要动态查询,因为在运行select语句以获取列名时构建drop语句。

declare @column varchar(max)
set @column = (select............)
-- Print @column -- Use this to check if the column name is what you want

declare @sql nvarchar(max)
set @sql = 'alter table Table1 drop column ' + @column
execute (@sql)

如果您有任何疑问,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.