2016-02-05 128 views
1

SO,SQL如何使用表名從表中選擇特定字段

我想找到一個(凌亂?)解決方案,以解決更混亂的問題。我有一個SQL Server 2014數據庫,它部分存儲來自另一個軟件包的數據,但也爲我存儲數據。該軟件爲每組數據創建一個包含特定字段的表格 - NameGeometry字段。例如,一個可能包含城市(dtCitiesData),另一個包含道路(dtRoadsData),另一個包含州(dtStates)等。我還有一個表(dtSpatialDataTables),其中存儲了存儲我想要的數據的表的名稱。該表只有2個字段:IDTableName

我想創造出查詢dtSpatialDataTables所有條目的SELECT語句,然後查詢所有表對應於一個TableName結果的名稱,並選擇從他們NameGeometry

僞代碼,有效我想這樣做:

SELECT TableName FROM dtSpatialDataTables 

FOREACH TableName : 
    SELECT Name, Geometry FROM (TableName) 

我可以通過對dtSpatialDataTables第一查詢,然後查詢到每個返回行的一個循環做到這一點很容易PHP TableName秒,但我想知道這是否可以通過SQL直接進行。

實際上,我想要做的就是用這個查詢創建一個VIEW,這樣我就可以直接查詢VIEW,而不用在很多查詢中處理時間。

這可能嗎?不幸的是,我的谷歌並沒有取得任何有意義的結果。

謝謝大家!

PS:我覺得這很混亂,而不是這樣做的方式。但我無法選擇軟件如何將數據放入我的數據庫中。我只需要使用我所得到的。所以......這是「正確」還是「錯誤」,我需要一個解決方案。 :)

+1

我不是100%確定你想要什麼,但聽起來你可以創建動態SQL並使用exec來運行它。這不是你可以在視圖中做的事情,但也許存儲過程會好嗎? –

+1

聽起來像你需要一個動態的SQL或光標(選擇你的毒藥),但你將需要創建一個過程,因爲它們都不會在VIEW中工作 – JamieD77

+0

您還需要指定是否要將'Name,Geometry'設置爲DISTINCT或不是 – JamieD77

回答

1

你可以做這樣的事情使用動態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聲明

+0

完美!一些微小的修改,這就像一個魅力。謝謝! –

相關問題