SQL 如何使用表名表从表中选择特定字段



SO,

我试图为一个更混乱的问题找到一个(混乱的?(解决方案。我有一个SQL Server 2014数据库,它部分存储来自另一个软件包的数据,但也为我存储数据。该软件为每组数据创建一个包含特定字段的表格 - 一个Name和一个Geometry字段。例如,一个可能包含城市(dtCitiesData(,另一个包含道路(dtRoadsData(,另一个包含州(dtStates(等。我还有一个表(dtSpatialDataTables(,它存储存储我想要的数据的表的名称。该表只有 2 个字段:IDTableName

我想创建一个 SELECT 语句,

该语句查询所有条目dtSpatialDataTables,然后查询具有与每个TableName结果对应的名称的所有表,并从中NameGeometry SELECT。

在伪代码中,实际上我想这样做:

SELECT TableName FROM dtSpatialDataTables
FOREACH TableName :
    SELECT Name, Geometry FROM (TableName)

我可以通过对dtSpatialDataTables的第一个查询,然后对返回的每个行TableName进行查询循环来轻松完成PHP,但我想知道这是否可以通过SQL直接进行。

实际上,我想做的是使用此查询创建一个 VIEW,以便我可以直接查询 VIEW,而不是将处理时间浸泡在可能大量的查询上。

这可能吗?不幸的是,我的谷歌搜索没有出现任何有意义的结果。

谢谢大家!

PS:我认为这很混乱,不应该这样做。但是我别无选择软件如何将数据放入我的数据库中。我只需要使用我得到的东西。所以。。。无论这是"正确"的方式还是"错误"的方式,我都需要一个解决方案。:)

你可以使用动态SQL做这样的事情。

CREATE PROCEDURE dbo.usp_SpatialData_GetByID
(
    @ID INT
)   
AS
BEGIN
    DECLARE @SQL NVARCHAR(MAX),
            @Selects NVARCHAR(MAX) = 'SELECT Name, Geometry, ''<<TableName>>'' AS Source FROM <<TableName>>'
    SELECT  @SQL = COALESCE(@SQL + ' UNION ALL ', '') + REPLACE(@Selects, '<<TableName>>', TableName)
    FROM    dtSpatialDataTables
    WHERE   ID = @ID
    EXEC(@SQL)
END
GO

我觉得您在某处遗漏了几何表的过滤,因此您可能需要在 @Selects 语句中添加过滤器

最新更新