![](/img/trans.png)
[英]How to select column names from multiple tables in SQL server 2008 by avoiding certain columns which reoccur in all tables
[英]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.