【发布时间】:2016-02-06 00:33:31
【问题描述】:
所以,
我正在尝试为一个更混乱的问题找到一个(混乱的?)解决方案。我有一个 SQL Server 2014 数据库,它部分存储来自另一个软件包的数据,但也为我存储数据。该软件为每组数据创建一个包含特定字段的表格 - Name 和 Geometry 字段。例如,一个可能包含城市 (dtCitiesData),另一个包含道路 (dtRoadsData),另一个包含州 (dtStates),等等。我还有一个表 (dtSpatialDataTables),其中存储了表的名称它存储我想要的数据。该表只有 2 个字段:ID 和 TableName。
我想创建一个 SELECT 语句,它查询 dtSpatialDataTables 的所有条目,然后查询名称对应于每个 TableName 结果的所有表,并从中选择 Name 和 Geometry。
在伪代码中,实际上我想这样做:
SELECT TableName FROM dtSpatialDataTables
FOREACH TableName :
SELECT Name, Geometry FROM (TableName)
我可以通过对dtSpatialDataTables 的第一个查询然后对每个返回的行TableNames 进行循环查询来轻松地做到这一点,但我想知道这是否可以直接通过 SQL 实现。
实际上,我想做的是用这个查询创建一个 VIEW,这样我就可以直接查询 VIEW,而不是在可能的大量查询上花费处理时间。
这可能吗?不幸的是,我的谷歌搜索没有找到任何有意义的结果。
谢谢大家!
PS:我认为这很混乱,而不是应该这样做。但是对于软件如何将数据放入我的数据库中,我别无选择。我只需要使用我得到的东西。所以......无论这是“正确”的方式还是“错误”的方式,我都需要一个解决方案。 :)
【问题讨论】:
-
我不是 100% 确定您想要什么,但听起来您可以创建动态 SQL 并使用 exec 运行它。这不是您可以在视图中执行的操作,但也许存储过程可以吗?
-
听起来你需要一个动态 sql 或游标(选择你的毒药),但你需要创建一个过程,因为它们都不能在 VIEW 中工作
-
还需要指定
Name, Geometry是否为DISTINCT -
您可以构建动态 SQL 查询。这可能会有所帮助:stackoverflow.com/questions/17955625/…
-
这样做的想法是 a) 节省处理时间 b) 使用单个 PHP 查询轻松访问数据。视图适用于那些,但存储过程会很快吗?还是只是做 PHP 在循环中会做的事情?
标签: sql-server database