繁体   English   中英

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

[英]Select all columns from all tables in SQL Server 2008

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

Select * From * 

在SQL Server 2008中???

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

或者可以创建一个返回表名称的选择。

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

试试这个,工作正常

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

然后你可以添加

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE ''

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

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

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

要从每个表中逐个选择*,您可以使用未记录但着名的sp_msforeachtable:

sp_msforeachtable 'select  * from ?'

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM