从SQL Server 2008中的所有表中选择所有列

时间:2009-10-07 20:58:14

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

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

Select * From * 
SQL Server 2008中的

???

表格列表非常大,并且有很多列,是否可以在不编写列名的情况下执行此操作?

或者也许做一个返回表名的选择。

6 个答案:

答案 0 :(得分:28)

这个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)

答案 1 :(得分:9)

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 

答案 2 :(得分:6)

试试这个,工作正常

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

然后你可以添加

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE ''

答案 3 :(得分:3)

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

中检索所有表的名称

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

也许如果你解释一下你要实现什么,而不是如何,我们可以提供更好的帮助。

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

sp_msforeachtable 'select  * from ?'

答案 4 :(得分:2)

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

答案 5 :(得分:2)

在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')**