如何从数据库中选择所有表中的所有列,例如:
Select * From *
SQL Server 2008中的???
表格列表非常大,并且有很多列,是否可以在不编写列名的情况下执行此操作?
或者也许做一个返回表名的选择。
答案 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')**