我有一個情況,我有幾百個複雜的Excel電子表格,每個電子表格都有多個數據透視表,針對sql數據庫運行查詢。我需要能夠將這些sql查詢轉換爲針對專有數據存儲的函數調用。這在很多層面上都很複雜,但我現在所討論的部分似乎已經在計算機科學中解決過了,那就是如何將sql語句「解析」爲一個定義良好的結構,以便我可以通過編程方式進行工作。解析現有的「複雜」SQL語句並轉換爲調用自定義API調用
我的出發點的例子:
SELECT vwFlowDataBest.MeasurementDate, vwFlowDataBest.LocationType, vwFlowDataBest.ScheduledVolume, tblPoints.Zone, tblPoints.Name AS SOME_ALIAS_FOR_NAME, vwFlowDataBest.PointID, tblCustomerType.Name, vwFlowDataBest.OperationallyAvailable, tblPoints.County, tblPoints.State, tblConnectingParty.Name
FROM Pipe2Pipe.dbo.tblConnectingParty tblConnectingParty, Pipe2Pipe.dbo.tblCustomerType tblCustomerType, Pipe2Pipe.dbo.tblPipelines tblPipelines, Pipe2Pipe.dbo.tblPoints tblPoints, Pipe2Pipe.dbo.vwFlowDataBest vwFlowDataBest
WHERE tblCustomerType.ID = tblPoints.CustomerTypeID AND tblPipelines.ID = vwFlowDataBest.PipelineID AND tblPoints.ID = vwFlowDataBest.PointID AND tblPoints.ConnectingPartyID = tblConnectingParty.ID AND ((tblPipelines.ID=16) AND (vwFlowDataBest.ScheduledVolume<>0) AND (tblPoints.Zone In ('mid 1','mid 2','mid 3','mid 4','mid 5','mid 6','mid 7')) AND (tblCustomerType.ID=16) AND (vwFlowDataBest.MeasurementDate>={ts '2010-05-15 00:00:00'}) AND (tblPipelines.ID<155))
因此,對於這個說法,我需要以編程方式處理SELECT部分中,FROM部分,和where部分,並在每個下屬。這種併發症是別名等問題,區分表之間的連接和where子句中的普通舊值過濾器,where子句中的分組(括號)以及其他問題。處理Excel數據透視表的複雜性完全超出了這個問題的範圍,我可以弄清楚。
就目前而言,我不介意不支持某些SQL函數,如「按組」,「具有」,等等......我的問題,這些是足夠小,如果有必要,我可以處理那些手動。但如果有一種已知的方法來處理這個問題,我會很開心。
我的感覺是,我可以通過將sql語句分成3個部分,然後進一步將每個部分分解爲其邏輯從屬部分,然後處理他們相應。但是,當我寫這篇文章的時候,我已經看到了我的計劃中的漏洞......這感覺就像是複雜性和邊緣案例的一個焦點。
我無法想象自己是第一個想要做這種事情的人,所以我的問題是,是否存在針對此類問題的陳舊方法,現有的圖書館,我可以採取的創新方法,或者任何建議一般適用於這項任務?