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

从SQL Server 2008中的所有表中选择所有列,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,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

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

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)

可以从
可以从中检索所有表的名称

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

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

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

sp_msforeachtable 'select  * from ?'

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

尝试此操作,效果很好

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 ''

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

你为什么要这么做?那真的没有道理。您希望从这样的查询中得到什么?如果您想注入SQL,那么您可以注入一种简单的方法来获取模式元数据。要真正做到这一点,需要一个使用系统视图等的语句,但你明白我的意思。嗯,我真的不知道,我是被要求这样做的。。。实际上,他们需要Excel中的数据,但数据是逐表的,所以我需要自动查询…这可能会有所帮助。如何为每个结果打印一个
table_name
?@Kuncevic,如果您想在每个结果集中包含表名,只需将其添加到@SQL中(将双“at”符号替换为单符号):选择@SQL=@@SQL+“选择”+table_name+“”作为表名,*从“+table_SCHEMA+”.“+table_name+”]+CHAR(13)从INFORMATION_SCHEMA.TABLESahh中,我做了完全相同的事情,但使用一个单引号
'+TABLE_NAME+'
-不起作用。而不是使用3
'''+表名+'
-这很有效。