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

SELECT * FROM tableA

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

SELECT * [except columnA] FROM tableA

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


当前回答

你可以这样尝试:

/* 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

其他回答

不,没有办法这样做,也没有很好的理由这样做。

在选择不应该使用*的数据时,应该始终指定所需的字段。原因是,即使稍后向表中添加另一个字段,您也希望查询能够正常工作。此外,您还可以指定结果中字段的顺序,以便重新排列表中的字段不会改变结果。

当然,这同样适用于*,除非有可能这样做。

右键单击对象资源管理器中的表,选择前1000行

它会列出所有列,而不是*。然后删除不需要的列。应该比你自己打快多了。

然后,当你觉得这有点太多的工作,获得Red Gate的SQL提示,并从tbl输入ssf,转到*并再次单击选项卡。

简单的解决方案。在SSMS中,找到您的表,右键单击它和脚本表As,然后选择到。查询将被写入列出的每一列。注释掉或删除您不想要的列。非常快速和简单的解决方案忽略一个列。

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

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

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

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

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

Done