让我们说吧
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专家,但就我而言。任何帮助,将不胜感激。谢谢!
我做了一个简单的查询,检查两个表中包含的列名,然后计算每个名称的出现次数。然后它显示出现少于两次的列,即仅出现在两个表之一中的列。
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
您可以使用此表中的数据进行单独的“删除列”查询。
在这种情况下,您需要动态查询,因为在运行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)
如果您有任何疑问,请告诉我。