如何选择除一列之外的表的所有列?

时间:2015-03-17 09:18:19

标签: sql sql-server

如何选择除一列之外的表的所有列?

我有近259列我不能在SELECT声明中提及258列。

还有其他办法吗?

13 个答案:

答案 0 :(得分:28)

您可以使用此方法从除以下列之外的所有列中获取数据: -

  1. 将所有数据插入临时表
  2. 然后从临时表中删除您不想要的列
  3. 从临时表中获取数据(这不包含已删除列的数据)
  4. 删除临时表
  5. 这样的事情:

    SELECT * INTO #TemporaryTable FROM YourTableName
    
    ALTER TABLE #TemporaryTable DROP COLUMN Columnwhichyouwanttoremove
    
    SELECT * FROM #TemporaryTable 
    
    DROP TABLE #TemporaryTable 
    

答案 1 :(得分:9)

创建一个视图。是的,在视图创建语句中,您必须列出每个...和...每个...字段...按...名称。

然后只是select * from viewname

答案 2 :(得分:6)

您可以从sys.columns表中获取列名详细信息

尝试以下查询:

SELECT * FROM SYS.COLUMNS 
WHERE object_id = OBJECT_ID('dbo.TableName') 
AND [Name] <> 'ColumnName'

DECLARE @sql as VARCHAR(8000)
SET @sql = 'SELECT '

SELECT @sql += [Name] + ', ' FROM SYS.COLUMNS 
WHERE object_id = OBJECT_ID('dbo.TableName') 
AND [Name] <> 'ColumnName'

SELECT @sql += ' FROM Dbo.TableName'

EXEC(@sql)

答案 3 :(得分:3)

有很多选项,其中之一是:

 CREATE TEMPORARY TABLE temp_tb SELECT * FROM orig_tb;
 ALTER TABLE temp_tb DROP col_x;
 SELECT * FROM temp_tb;

这里col_x是你不想在select语句中包含的列。

看看这个问题:Select all columns except one in MySQL?

答案 4 :(得分:2)

如果不创建新表,您可以简单地执行(例如使用mysqli):

  1. 获取所有列
  2. 遍历所有列并删除您想要的内容
  3. 提出您的查询
  4. $r = mysqli_query('SELECT column_name FROM information_schema.columns WHERE table_name = table_to_query');
    
    $c = count($r); while($c--) if($r[$c]['column_name'] != 'column_to_remove_from_query') $a[] = $r[$c]['column_name']; else unset($r[$c]);
    
    $r = mysqli_query('SELECT ' . implode(',', $a) . ' FROM table_to_query');
    

答案 5 :(得分:2)

您可以通过简单的查询来检索列名列表,然后通过在这样的查询中应用将其删除。

SELECT * FROM (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
) AS allColumns
WHERE allColumns.COLUMN_NAME NOT IN ('unwantedCol1', 'unwantedCol2')

答案 6 :(得分:1)

如果您使用的是DataGrip,则可以执行以下操作:

  1. 输入您的SELECT语句import React from "react"; import { Login, Register } from "./components/index"; class App extends React.Component { constructor(props) { super(props); this.state = { isLogginActive: true }; } componentDidMount() { //Add .right by default this.rightSide.classList.add("right"); } changeState() { const { isLogginActive } = this.state; if (isLogginActive) { this.rightSide.classList.remove("right"); this.rightSide.classList.add("left"); } else { this.rightSide.classList.remove("left"); this.rightSide.classList.add("right"); } this.setState(prevState => ({ isLogginActive: !prevState.isLogginActive })); } render() { const { isLogginActive } = this.state; const current = isLogginActive ? "Register" : "Login"; const currentActive = isLogginActive ? "login" : "register"; return ( <div className="App"> <div className="login"> <div className="container" ref={ref => (this.container = ref)}> {isLogginActive && ( <Login containerRef={ref => (this.current = ref)} /> )} {!isLogginActive && ( <Register containerRef={ref => (this.current = ref)} /> )} </div> <RightSide current={current} currentActive={currentActive} containerRef={ref => (this.rightSide = ref)} onClick={this.changeState.bind(this)} /> </div> </div> ); } } const RightSide = props => { return ( <div className="right-side" ref={props.containerRef} onClick={props.onClick} > <div className="inner-container"> <div className="text">{props.current}</div> </div> </div> ); }; export default App;
  2. 将光标置于SELECT * FROM <your_table>;上,然后按*
  3. 您将获得带有Alt+Enter选项的弹出菜单
  4. 单击它,它将转换为Expand column list,其中包含完整的列列表
  5. 现在您可以删除不需要的列

Here is a link for an example on how to do it.

答案 7 :(得分:0)

在您的情况下,在对象资源管理器中展开该数据库的列。将列拖到查询区域。

然后只删除您不想要的一两列,然后运行它。我对这些建议比这更容易接受。

答案 8 :(得分:0)

尝试以下查询:

DECLARE @Temp NVARCHAR(MAX); 
DECLARE @SQL NVARCHAR(MAX);

SET @Temp = '';
SELECT @Temp = @Temp + COLUMN_NAME + ', ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='Person' AND COLUMN_NAME NOT IN ('Id')  

SET @SQL = 'SELECT ' + SUBSTRING(@Temp, 0, LEN(@Temp)) +' FROM [Person]';
EXECUTE SP_EXECUTESQL @SQL;

答案 9 :(得分:0)

只有一种方法可以实现此列名称。找不到其他方法。您必须列出所有列名

答案 10 :(得分:0)

这不是通用解决方案,但是某些数据库允许您使用正则表达式指定列。

例如,对于Hive,以下查询选择ds和hr以外的所有列:

SELECT `(ds|hr)?+.+` FROM sales

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-REGEXColumnSpecification

答案 11 :(得分:0)

当我一直使用这种方法时,我只是想回应@Luann的评论。

只需右键单击表>脚本表>>选择到>新建查询窗口。

您将看到选择查询。只需取出要排除的列,即可获得首选查询。 enter image description here

答案 12 :(得分:0)

  1. 使用数据库的任何良好自动完成编辑器生成选择查询。
  2. 将选择的查询复制并粘贴到保留的方法(函数)中,并将其ResultSet返回到主程序,或使用相同的方法进行处理。
  3. 每次需要时都调用此方法