有没有办法编写如下的查询:
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表。
答案 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)'