我们都知道,要从表中选择所有列,可以使用

SELECT * FROM tableA

是否有一种方法可以在不指定所有列的情况下从表中排除列?

SELECT * [except columnA] FROM tableA

我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。


当前回答

根据表的大小,您可以将其导出到Excel中,并将其转置为一个新表,其中原始表的列将是新表中的行。然后将其返回到SQL数据库中,根据条件选择行并将它们插入到另一个新表中。最后,将这个更新的表导出到Excel,并进行另一次转置,以获得所需的表,并将其带回SQL数据库。

不确定转置是否可以在SQL数据库中完成,如果是,那么它会更容易。

Jeff

其他回答

试试这个…

=QUERY(TRANSPOSE(QUERY('Data'!A1:AH,"SELECT * ",1)),"SELECT * WHERE Col1 <> 'Column 
 name'",1)

如果你正在使用mysql-workbench,你可以右键单击表资源管理器,然后单击“发送到SQL编辑器->选择所有语句”。

它会发送一条语句,比如“Select col1, col2,…”从表”。

然后删除那些你不需要的。

根据表的大小,您可以将其导出到Excel中,并将其转置为一个新表,其中原始表的列将是新表中的行。然后将其返回到SQL数据库中,根据条件选择行并将它们插入到另一个新表中。最后,将这个更新的表导出到Excel,并进行另一次转置,以获得所需的表,并将其带回SQL数据库。

不确定转置是否可以在SQL数据库中完成,如果是,那么它会更容易。

Jeff

如果你不想手动写每个列名,你可以使用Script Table As在SSMS中的表或视图中右键单击:

然后你会在新建查询编辑器窗口中得到整个选择查询,然后像这样删除不需要的列:

Done

你可以这样尝试:

/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable