【问题标题】:Select all columns from all tables in SQL Server 2008从 SQL Server 2008 中的所有表中选择所有列
【发布时间】:2009-10-07 20:58:14
【问题描述】:

如何从数据库中的所有表中选择所有列,例如:

Select * From * 

在 SQL Server 2008 中???

表格列表很大很大,列这么多,不写列名可以吗?

或者可以选择返回表的名称。

【问题讨论】:

  • 你为什么要这样做?
  • 这没有任何意义。您希望从这样的查询中得到什么?
  • 如果你想注入 SQL,这是你可以注入的更简单的事情之一,以取回模式元数据。要真正做到这一点,需要使用系统视图等声明,但你明白我的意思。
  • 嗯,不知道,我被要求这样做...实际上他们需要 Excel 中的数据,但它是逐表的,所以我需要自动查询...
  • 这可能会有所帮助。 kb.softescu.ro/programming/p-tsql/…

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

此 SQL 将执行此操作...

DECLARE @SQL AS VarChar(MAX)
SET @SQL = ''

SELECT @SQL = @SQL + 'SELECT * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES

EXEC (@SQL)

【讨论】:

  • 如何为每个结果打印table_name
  • @Kuncevic,如果您想在每个结果集中包含表名,只需将其添加到 @@SQL 中(将双“at”符号替换为一个): SELECT @@SQL = @@SQL + 'SELECT ''' + TABLE_NAME + ''' AS TableName, * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13) FROM INFORMATION_SCHEMA.TABLES
  • 啊,我在做完全相同的事情,但使用 1 个单引号 ' + TABLE_NAME + ' - 没有用。而不是使用 3 ''' + TABLE_NAME + ''' - 那行得通。
【解决方案2】:

试试这个,效果很好

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

那么你可以添加

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE ''

【讨论】:

    【解决方案3】:
    SELECT t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where t.name = 'ProductItem'  AND C.name like '%retail%'
    ORDER BY schema_name, table_name 
    

    【讨论】:

      【解决方案4】:

      可以从sys.columns检索所有列的名称
      可以从sys.tables检索所有表的名称

      但是不可能从所有表中检索所有数据。只要查询中涉及多个表,就需要 JOIN。除非提供连接条件,否则表将作为完整的笛卡尔积连接,这意味着每个表中的每一行都与所有其他表中的每一行匹配。您请求的此类查询将生成 10 个表,每个表有 10 条记录,每个记录不少于 10e10 条记录,即。 1000 亿条记录。我确定你不想要这个。

      也许如果您说明您要实现什么什么,而不是如何,我们可以提供更好的帮助。

      要从每个表中逐个选择 *,您可以使用未记录但众所周知的 sp_msforeachtable:

      sp_msforeachtable 'select  * from ?'
      

      【讨论】:

        【解决方案5】:

        如果您要发送到 Excel,我建议您使用导出向导并简单地选择那里的所有表格。在对象浏览器中,将光标放在数据库名称上并右键单击。选择任务 - 导出数据并按照向导进行操作。为什么有人想要 Excel 中的整个数据库超出了我的范围,但这是最好的方法。如果您需要多次执行此操作,可以将导出保存在 SSIS 包中。

        【讨论】:

          【解决方案6】:

          在 SQL Server 2016 Management Studio(版本:13.0.15900.1)中,获取指定表中的所有列名,语法如下:

             **Select name from [YourDatabaseName].[sys].[all_columns] 
             where object_id=(Select object_id from [YourDatabaseName].[sys].[tables] 
             where name='YourTableName')**
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-17
            • 1970-01-01
            相关资源
            最近更新 更多