我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
根据表的大小,您可以将其导出到Excel中,并将其转置为一个新表,其中原始表的列将是新表中的行。然后将其返回到SQL数据库中,根据条件选择行并将它们插入到另一个新表中。最后,将这个更新的表导出到Excel,并进行另一次转置,以获得所需的表,并将其带回SQL数据库。
不确定转置是否可以在SQL数据库中完成,如果是,那么它会更容易。
Jeff
其他回答
如果有人像我一样使用MySql,请使用这个:
CREATE TABLE TempTable AS SELECT * FROM #YourTable;
ALTER TABLE TempTable
DROP COLUMN #YourColumn;
SELECT * FROM TempTable;
DROP TABLE TempTable;
通常的最佳实践是指定需要哪些列,而不是仅仅指定*。因此,您只需声明希望select返回哪些字段。
基本上,你不能做你想做的事情,但你可以得到正确的工具来帮助你,让事情变得更容易一些。
如果你看一下Red-Gate的SQL提示,你可以输入“SELECT * FROM MyTable”,然后把光标移到“*”后面,然后点击<TAB>来展开字段列表,并删除那些你不需要的字段。
这不是一个完美的解决方案——但却是一个非常好的解决方案!:-)太糟糕了MS SQL Server Management Studio的智能感知仍然不够智能,无法提供此功能.......
Marc
是的,这是可能的(但不建议)。
CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'
DECLARE @columns varchar(8000)
SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
ORDER BY ORDINAL_POSITION
EXEC ('SELECT ' + @columns + ' FROM contact')
代码说明:
Declare a variable to store a comma separated list of column names. This defaults to NULL. Use a system view to determine the names of the columns in our table. Use SELECT @variable = @variable + ... FROM to concatenate the column names. This type of SELECT does not not return a result set. This is perhaps undocumented behaviour but works in every version of SQL Server. As an alternative you could use SET @variable = (SELECT ... FOR XML PATH('')) to concatenate strings. Use the ISNULL function to prepend a comma only if this is not the first column name. Use the QUOTENAME function to support spaces and punctuation in column names. Use the WHERE clause to hide columns we don't want to see. Use EXEC (@variable), also known as dynamic SQL, to resolve the column names at runtime. This is needed because we don't know the column names at compile time.
如果您正在使用SQL Server Management Studio,那么请执行以下操作:
输入所需的表名并选择它 按Alt + F1 O /p表示表中的列。 选择所需的列 复制并粘贴这些在您的选择查询 触发查询。
享受。