首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL .How to:从像data.PIR一样开始的表中选择*

SQL .How to:从像data.PIR一样开始的表中选择*
EN

Stack Overflow用户
提问于 2020-09-14 07:06:44
回答 2查看 80关注 0票数 0

假设我有多个sql表,它们被命名为:

代码语言:javascript
复制
data.PIR_12
data.PIR_13
data.Pir_2455
data.Pir_somedata

我能做一些选择吗?

代码语言:javascript
复制
select * from data.PIR% where code = 'mycode'

或者它是不可能的,因为模式可能是不同的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-14 16:54:46

我不赞成说“请修正你的数据结构”的评论。请查找数据正常化&在实现这样的东西之前要仔细考虑一下。

只有当你的规模已经很大的时候,你才需要一些接近数据桶的东西。

如果您认为您需要这一点,因为您有不同的数据内容,那么回到规范化,并考虑进一步抽象。你可以得到最抽象的(名称,价值)。

不过,如果您知道结构,并且确信动态表名是答案,那么在sqlserver中您可以构造动态sql。

代码语言:javascript
复制
declare @sql nvarchar(2000), @sometable nvarchar(50), @myid nvarchar(10)
set @sometable='_12'
set @myid = '12'
set @sql = 'select name from data.pir' + @sometable + ' where value='+@myid
exec @sql

但是,您可能已经遇到了很多麻烦--这些查询很难处理来自或包装错误处理的结果。

您可以从元数据视图中选择以获取表列表。或者将表列表放入您自己设计的表中。并编写一个迭代器来使用动态sql遍历元数据输出。

动态sql有一些例子,但我认为很久以前就过时了(它们过去的目标是针对复杂临时查询的动态where子句)。

在过去,我使用这些查询进行大量的跨服务器调用(调用相同的sp,只更改servername (&序列化所有调用使循环迭代是最有效的方法)的时间原因)。

票数 0
EN

Stack Overflow用户

发布于 2020-09-14 16:55:40

假设有合理的理由按照表的结构方式构造这些表,并且假定表的列表是固定的,则可以使用联合:

代码语言:javascript
复制
SELECT Column1, Column2, Column3 ... FROM data.PIR_12
UNION SELECT Column1, Column2, Column3 ... FROM data.PIR_13
UNION SELECT Column1, Column2, Column3 ... FROM data.Pir_2455
UNION SELECT Column1, Column2, Column3 ... FROM data.Pir_somedata
WHERE Column3 = 'mycode'

注意,我省略了"SELECT *“,这被认为是错误的做法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63879560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档