因此,我有一個腳本,它使用批量插入從文件中拉出文本並將其內容插入到表中。我從文本文件加載,因爲文本可能很大,在這樣做,我不需要擔心逃跑。我有本地腳本在一個已定義的目錄下工作。 ex('C:\ Users \ me \ Files \ File.txt')但是,我需要在Post部署腳本中運行此腳本。我正在閱讀的文本文件位於同一個數據庫項目中。我無法執行設定的目錄,因爲目錄可能會因項目發佈到的不同環境而有所不同。有沒有辦法獲得相對路徑或獲得部署後解決方案/項目的目錄?批量插入後部署腳本
回答
所以,因爲批量插入需要絕對路徑,腳本沒有相對路徑的概念,並且這將被部署在多個我不知道絕對路徑的環境中。我決定利用Powershell和Bulk Insert。所以,我正在做的是,在數據庫項目的預生成中,我打電話給我的Powershell腳本。 Powershell腳本能夠找出它的當前目錄。我構建了一個在部署後腳本中調用的SQL文件。在這個SQL文件中,我使用當前目錄批量插入。
爲什麼不使用BCP:http://msdn.microsoft.com/en-us/library/ms162802.aspx?它可以處理相對路徑。如果你能夠使用所有的PowerShell,我不明白你爲什麼不能調用BCP.EXE。它基本上與BULK INSERT
的API相同。
您是否考慮過在文件系統上使用標準位置?當我需要寫DOS/CMD腳本可移植(包括通過T-SQL以後食用安裝的東西,如CREATE ASSEMBLY FROM),我做這樣的事情:
IF NOT EXIST C:\TEMP\MyInstallFolder (
MKDIR C:\TEMP\MyInstallFolder
)
REM put stuff into C:\TEMP\MyInstallFolder now that it is certain to be there)
REM CALL some process that looks in C:\TEMP\MyInstallFolder
的MKDIR
將創建所有丟失的父文件夾。因此,像TEMP
這樣的文件夾在運行Windows的個人電腦上是標準配置,因爲它們已經移動到每個用戶的臨時文件夾,但是已經創建,並且創建了MyInstallFolder
,所以不會出現任何錯誤。 IF NOT EXIST
將確保在第一次運行後重新運行腳本也不會出錯。
是的,我考慮過使用文件系統。但是,對於源代碼控制的緣故,應該在哪裏添加/編輯文件的邏輯內聚,將它放在數據庫項目中是有意義的。至於你的CMD建議,我認爲我正在做一些與Powershell類似的事情。 – ScubaSteve 2014-11-06 22:14:55
- 1. 批量插入谷歌應用腳本
- 2. 部署後的Openshift腳本
- 3. PDO批量導入腳本
- 4. 批量/批量插入R
- 5. 批量插入
- 6. 批量插入
- 7. 如何使用Post部署腳本在遠程服務器上批量插入CSV
- 8. Cassandra批量插入操作,在內部
- 9. SQL Server項目:部署後腳本(S)
- 10. 在構建腳本後部署
- 11. SQL Server的部署前後腳本
- 12. Elastic Beanstalk運行後部署腳本
- 13. 從shell腳本增量部署
- 14. 批量插入後的SQL觸發器
- 15. 批量插入後檢索ID's
- 16. Web部署後運行post部署腳本
- 17. 部署和DB腳本通過部署後的網絡掛接
- 18. 批量Perl腳本
- 19. Bigtable批量插入
- 20. HQL批量插入
- 21. Sql批量插入
- 22. Laravel批量插入
- 23. kohana批量插入
- 24. 批量插入Cassandra
- 25. Grails批量插入
- 26. 批量插入行
- 27. SQLite3:批量插入?
- 28. 批量插入表
- 29. 批量SQL插入
- 30. oracle批量插入
我實際上需要做其他一些事情,即其他列/插入以及從文件加載文本。現在,我將批量插入臨時表中,然後執行一些其他操作並從臨時表中拉出。 – ScubaSteve 2014-11-06 19:37:34
@ScubaSteve:好的,你可以在你的proc中調用'xp_cmdshell'來導入一個全局臨時表。只是一個想法。 – 2014-11-06 19:47:31
是的,只是作爲練習的標準,我想避免使用全局臨時表。 – ScubaSteve 2014-11-06 19:57:34