从n个表中选择*

时间:2011-09-26 15:11:33

标签: sql sql-server sql-server-2005 sql-server-2008 dynamic

有没有办法编写如下的查询:

select * from <some number of tables>

...表的数量未知?我想避免使用动态SQL。我想从(表)具有特定前缀的所有表中选择所有行:

select * from t1
select * from t2
select * from t3
...

我不知道有多少t(n)可能(可能是1,可能是20,等等)t表列结构不一样。其中一些有2列,其中一些是3或4列。

使用动态SQL并不难,但我想知道是否有办法使用sys.tables之类的东西来做到这一点。

更新

基本数据库设计解释

N公司将注册/登录我的应用程序

每家公司都会设置一个包含x列的表

(x取决于公司的业务类型,可以是不同的,例如想到两家公司:一家是Carpenter,另一家是报纸)

每家公司都会使用我建立的API填写自己的表格

我如何处理数据:

我有一个“处理器”,它将是SQL或C#或其他。

如果一家公司至少有一行,我将在COMMON表中生成一条记录。

因此最终结果将全部放在一个表格中。

这N家公司中的任何一家都会登录,并会看到为他自己公司过滤的COMMON表。

2 个答案:

答案 0 :(得分:10)

没有动态SQL就没有办法做到这一点。并且拥有不同的表格结构根本无济于事。

<强>更新

没有简单的方法可以在一个结果集中返回所需的输出(结果集至少具有与大多数列相同的表列数,甚至不能让我开始使用数据类型兼容性) 。

但是,你应该检查@ KM。的答案。这将带来多个结果集。

答案 1 :(得分:4)

列出您可以尝试的所有表格:

EXEC sp_msforeachtable 'SELECT * FROM  ?'

您可以通过执行以下操作来编程/包括/排除表格。

EXEC sp_msforeachtable 'IF LEFT(''?'',9)=''[dbo].[xy'' BEGIN SELECT * FROM  ? END ELSE PRINT LEFT(''?'',9)'
相关问题