我们说
表1具有列:列1列2列3
表2具有列:列2列3列4
我希望删除Column1,因为它不在Table2中。
我猜测我需要加入,然后从中删除。我做了一些搜索,发现了这篇文章: 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专家,但据我所知。任何帮助,将不胜感激。谢谢!
答案 0 :(得分: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)
如果您有任何疑问,请告诉我。
答案 1 :(得分: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
您可以使用该表中的数据进行单独的“空列”查询。