Ssas

使用 #temp 表從查詢中載入 SSAS 表格模型表失敗

  • November 7, 2019

在我們的 SSAS 表格模型中,我們有幾種使用複雜查詢來創建/填充表的情況。

由於專有資訊和純查詢長度,此處無法展示實際案例,但以下測試案例說明了這種情況:

SELECT s.Servername, i.instanceID, i.InstanceName, i.ClientVersion, i.MajorVersion
 INTO #InstanceList
 FROM ServerLookup s
INNER JOIN InstanceLookup i
        ON i.ServerID = s.ServerID

SELECT i.Servername, i.InstanceName, i.ClientVersion, i.MajorVersion, im.EntryDescription, im.MonitorID
 INTO #InstanceMonitoring
 FROM #InstanceList i
INNER JOIN InstanceMonitor im
        ON im.InstanceID = i.InstanceID

SELECT i.ServerName, i.instanceName, m.MonitorName, m.MonitorDescription
 FROM #InstanceMonitoring i
INNER JOIN MonitorLookup m on m.MonitorID = i.MonitorID

查詢在 SSMS 中執行 fin,但是當我們嘗試在表格模型中創建表時,它會拋出以下錯誤消息:

無法將修改保存到伺服器。返回錯誤:‘OLE DB 或 ODBC 錯誤。’。

沒有關於該錯誤的更多資訊。

我無法找到任何說明臨時表不能用於創建表格模型表的文件,並且我不願意告訴我的開發人員社區,如果沒有一些資訊來支持它就無法完成。

SQL 查詢可以轉換為儲存過程,然後作為 SSAS 維度/事實表的源 SQL 語句執行。與典型的儲存過程一樣,您可以毫無問題地使用臨時表。可以通過使用EXEC帶有結果集的語句從 SSAS 呼叫儲存過程,然後以與來自視圖或表的方式相同的方式使用該結果集。

EXEC Schema.SP_Name

您可以在 SSAS 中以這種方式定義和使用臨時表:

with TempTableName as (<*select clause for temp table*>) Select <*columns from TempTableName and other tables*> from TempTableName, <*other tables*> where <*join conditions*>

引用自:https://dba.stackexchange.com/questions/235409