2014-10-04 42 views
4

我已經使用SQL Server中的導入/導出實用程序將數據從視圖導出到Excel文件中創建了一個SSIS包。我還通過SQL Server中的計劃安排了它,並且一切正常。如何繞過SSIS VS_NEEDSNEWMETADATA錯誤?

從數據導出數據的觀點實際上是從多個視圖等獲取數據,在「層次結構」中關於3個級別。

當我修改進入頂級視圖(從中導出數據)的任何視圖的列別名時,遇到錯誤VS_NEEDSNEWMETADATA

研究後,我明白這就是爲什麼我得到的錯誤,但有什麼辦法來「傳播」的「新視圖」的元數據,所以我不必每次創建時重新創建SSIS包視圖結構的變化?

回答

3

沒有。 SSIS中的數據流與源緊密相連。對列名或數據類型的更改將導致驗證步驟失敗,導致出錯。

爲了緩解它,我要麼保持你的列別名相同 - 視圖/表值函數/存儲過程在這方面很方便。

我會使用的另一種方法是自動創建包。根據你的個人資料,我懷疑這是一件簡單的事情。不要在SSMS中右鍵單擊來爲每次更改重新創建您的SSIS包,請使用您認爲合適的任何技術。我使用基本的.NET SSIS庫來創建包,但當我使用COM(數據流項)時,它們對我來說是痛苦的。然後我使用EzAPI構建了一些包,這些包抽象掉了一些COM的東西,但它不是100%完整的。我目前對備用包裝施工的熱愛是Biml

從CodePlex下載BIDS Helper。它是免費的,並提供了許多有用的功能,但並未削減SSIS/SSRS/SSAS的開發。可以將Biml XML轉換爲SSIS包XML。你可以look through my answers,看看它的一些工作方式。在你的情況下,它將成爲Excel目的地的一個非常基本的OLE DB源。您可以指定源視圖名稱,並且每次對視圖進行更改時,單擊生成包並完成。 Biml將接觸到您的信息來源,識別元數據並使用它爲您的目的地生成數據類型和名稱。

+0

嗨billinkc,你可以發送一些示例biml代碼來繞過此錯誤或如何自動刷新源元數據 – Jack 2016-03-16 04:33:41

+0

嗯...... BIML需要在每次更改電子表格時重新創建SSIS包。是。它在Visual Studio中自動執行該過程。但不能從已部署到SQL Server或其他位置的SSIS包內自動運行。 BIML雖然對某些人有幫助,但並未回答所提出的問題。 – TamusJRoyce 2017-05-30 20:55:01

+0

@TamusJRoyce答案在第一句 - 它不能做,我解釋原因。我提出了兩種避免根本原因的方法。首先是退出改變你的來源。第二種是採取一種方法,可以自動完成問題的解決 – billinkc 2017-05-31 14:56:21

0

工作的唯一方法是製作一個腳本任務,它根據來自文件的數據讀取您的表架構並添加或更改它。你將不得不通過C#自定義解析你的文件。並通過C#連接並編寫您的數據庫。爲了保持與SSIS相同的性能,實現一個IDataReader並將其傳遞給SqlBulkCopy。 DataTable也可能實現IDataReader。

或者購買連接到SSIS的第三方實用程序。並將該產品的程序集部署到SQL Server。

我會說,這是一個巨大的痛苦。我發現將.csv文件保存到Hadoop/HDFS + SQL Server和Polybase使其在不使用etl的情況下自動查詢變得更容易。